繁体   English   中英

如何在 python 中制作多色 seaborn 线图

[英]How to make a multi-color seaborn lineplot in python

我有一个带有键值对的字典:

COLORS= {'fish':'blue','tigers':'orange'}

和数据:

  team  value  
0 fish   20
1 fish   15
2 fish   10
3 tigers 7
4 tigers 13
5 tigers 15

我想制作一个线图并使用.get()方法获取每个团队的颜色并相应地为线 plot 着色(线的前三半为蓝色,后半为橙色)

我尝试使用以下代码:

sns.lineplot(data = df, x = np.arange(len(df)), y = value, color=COLORS.get(df.team)

但我得到了错误


TypeError: 'Series' objects are mutable, thus they cannot be hashed

我可以让它与下面的代码一起工作

...color=COLORS[df.team.iloc[0]]

但这使整个线图成为出现的第一种颜色,在这种情况下为蓝色。 同样,我想根据team为 lineplot 着色,我不确定为什么.get()不起作用。 有任何想法吗?

.get()不起作用,因为您在dictionary object 上调用它,但传递pandas.Series object。

如果您传递要搜索的单个值,它将起作用。 (如果您需要进一步解释,请参阅这篇文章
您通过传递COLORS[df.team.iloc[0]]完成了该操作,但它只传递了一个值,即第一个团队,这就是为什么您以一种颜色获得整个 plot 的原因。

我将按团队对 DataFrame 进行分组,然后遍历分组的 DataFrame 并为每个团队绘制一条新线。 现在您可以在COLORS字典上使用.get() function 并获得正确的颜色。

看看这是否对您有帮助:

df = pd.DataFrame(data=data)
gk = df.groupby("team")
x = np.arange(len(df))
index = 0
for team_name, team_group in gk:
    sns.lineplot(
        x=x[index : index + len(team_group)],
        y=team_group.value,
        color=COLORS.get(team_name),
    )
    index += len(team_group)
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM