[英]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.