Seaborn - change bar color according to hue name(海运-根据色调名称更改条形图颜色)
本文介绍了海运-根据色调名称更改条形图颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用seaborn
和pandas
从不同(但相关)的数据创建一些条形图。这两个数据集共享一个用作hue
的公共类别,因此,我希望确保这两个图表中此类别的条形图颜色匹配。我该怎么做呢?
基本示例如下:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
sns.set_style('darkgrid')
fig, ax = plt.subplots()
a = pd.DataFrame({'Program': ['A', 'A', 'B', 'B', 'Total', 'Total'],
'Scenario': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'Duration': [4, 3, 5, 4, 9, 7]})
g = sns.barplot(data=a, x='Scenario', y='Duration',
hue='Program', ci=None)
plt.tight_layout()
plt.savefig('3 progs.png')
plt.clf()
b = pd.DataFrame({'Program': ['A', 'A', 'B', 'B', 'C', 'C', 'Total', 'Total'],
'Scenario': ['X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y'],
'Duration': [4, 3, 5, 4, 3, 2, 12, 9]})
g = sns.barplot(data=b, x='Scenario', y='Duration',
hue='Program', ci=None)
plt.tight_layout()
plt.savefig('4 progs.png')
生成两个图表:
在此示例中,我希望确保Total
类别在两个图表中使用相同的颜色(例如黑色)
推荐答案
A.使用颜色列表
要确保两个绘图中相同类别的颜色相同,最简单的解决方案是在创建绘图时手动指定颜色。
# First bar plot
ax = sns.barplot(data=a, x='Scenario', y='Duration',
hue='Program', ci=None, palette=["C0", "C1", "k"])
# ...
# Second bar plot
ax2 = sns.barplot(data=b, x='Scenario', y='Duration',
hue='Program', ci=None, palette=["C0", "C1", "C2", "k"])
颜色"C2"
(颜色周期的第三种颜色)仅出现在存在程序C的第二个绘图中。
B.使用词典
您也可以使用字典代替列表,将hue
列中的值映射到颜色。
palette ={"A": "C0", "B": "C1", "C": "C2", "Total": "k"}
ax = sns.barplot(data=a, x='Scenario', y='Duration', hue='Program', palette=palette)
# ...
ax2 = sns.barplot(data=b, x='Scenario', y='Duration', hue='Program', palette=palette)
在这两种情况下,输出将如下所示:
C.自动词典
最后,您可以根据hue
列中的值自动创建此字典。这样做的好处是,您既不需要事先知道各个数据帧中的颜色,也不需要知道它们的值。
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
sns.set_style('darkgrid')
fig, ax = plt.subplots()
a = pd.DataFrame({'Program': ['A', 'A', 'B', 'B', 'Total', 'Total'],
'Scenario': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'Duration': [4, 3, 5, 4, 9, 7]})
b = pd.DataFrame({'Program': ['A', 'A', 'B', 'B', 'C', 'C', 'Total', 'Total'],
'Scenario': ['X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y'],
'Duration': [4, 3, 5, 4, 3, 2, 12, 9]})
unique = a["Program"].append(b["Program"]).unique()
palette = dict(zip(unique, sns.color_palette(n_colors=len(unique))))
palette.update({"Total":"k"})
ax = sns.barplot(data=a, x='Scenario', y='Duration',
hue='Program', ci=None, palette=palette)
plt.tight_layout()
plt.figure()
ax2 = sns.barplot(data=b, x='Scenario', y='Duration',
hue='Program', ci=None, palette=palette)
plt.tight_layout()
plt.show()
这篇关于海运-根据色调名称更改条形图颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:海运-根据色调名称更改条形图颜色
基础教程推荐
猜你喜欢
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01