且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

海运-根据色调名称更改条形图颜色

更新时间:2023-08-26 22:11:28

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()