【发布时间】: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()
如您所见,它不是根据数据点的值来确定颜色范围,而是根据数据点的索引来改变颜色。你对此有什么想法吗?
非常感谢!
【问题讨论】: