【问题标题】:Seaborn: Create a bar chart with gradient coloursSeaborn:使用渐变颜色创建条形图
【发布时间】:2020-02-10 22:43:09
【问题描述】:

我有一个列表,其中包含不同方法的名称及其在我想使用条形图显示的测试集上的性能。好吧,事实上我想画出它们相对于基线模型的相对改进/退化。所以,数据看起来像:

system_1,+2.5
system_2,-0.8
system_3,+0.24

我在 seaborn 中尝试了条形图,它为我提供了一个具有固定颜色的简单条形图。但是,我正在寻找一个条形图,其中颜色在red, white, green 的范围内,其中红色对应于data['score'].min(),白色对应于0,绿色代表data['score'].max()。我希望颜色的明暗度显示它们与 0 的距离,这意味着深红色表示最差的系统,深绿色表示性能最好的系统,中间的所有性能都用较浅的颜色表示。

我找到了一些制作渐变颜色的解决方案,但它们并没有达到我的预期。这是我的代码和我得到的图表。

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import sys
import numpy as np

sns.set(style="whitegrid", color_codes=True)
data = pd.read_csv(sys.argv[1])
pal = sns.color_palette("Greens_d", len(data))
colors = [0 if c >=0 else 1 for c in data['performance']]
ax = sns.barplot(x="performance", y="System", data=data, palette=pal)
plt.tight_layout()
plt.show()

如您所见,它不是根据数据点的值来确定颜色范围,而是根据数据点的索引来改变颜色。你对此有什么想法吗?

非常感谢!

【问题讨论】:

    标签: plot bar-chart seaborn


    【解决方案1】:

    以下方法使用发散范数和红-黄-绿颜色图将最低值映射到红色极值,将零值映射到黄色,将最高值映射到绿色。

    由于短条的颜色非常浅,因此添加了黑色边缘以使每个条都清晰可见。

    import seaborn as sns
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.colors import DivergingNorm
    import numpy as np
    
    sns.set(style='whitegrid', color_codes=True)
    N = 11
    data = pd.DataFrame({'System': [f'System {i}' for i in range(1, N + 1)],
                         'performance': np.random.uniform(-1.5, 2.5, N)})
    
    norm = DivergingNorm(vmin=data.performance.min(), vcenter=0, vmax=data.performance.max())
    colors = [plt.cm.RdYlGn(norm(c)) for c in data['performance']]
    ax = sns.barplot(x='performance', y='System', data=data, palette=colors, edgecolor='black')
    plt.tight_layout()
    plt.show()
    

    Seaborn 的diverging_palette 可用于在给定两个色调值的情况下创建调色板。 0 的色调是红色,150 的色调是绿色。默认中心为白色。您可以尝试饱和度s=80 和亮度l=55

    red_green_pal = sns.diverging_palette(0, 150, n=256, as_cmap=True)
    colors = [red_green_pal(norm(c)) for c in data['performance']]
    

    【讨论】:

    • 太棒了!非常感谢你。有效。顺便问一下,有没有 RedWhiteGreen 调色板而不是 RedYelloGreen 调色板?
    猜你喜欢
    • 2018-09-01
    • 2018-10-16
    • 2019-05-14
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多