我有一个包含键值对的字典:
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()
方法来获得每个团队的颜色,并相应地为线图着色(线的前三个一半是蓝色,后一半是橙子)
我尝试使用以下代码:
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
给线图着色,我不确定为什么.get()
不起作用。有什么想法吗?
1条答案
按热度按时间woobm2wo1#
.get()
不起作用,因为你在dictionary
对象上调用它,但传递的是pandas.Series
对象。如果你传递一个你正在搜索的值,它将工作。(如果你需要进一步的解释,请参阅这篇文章)
你通过传递
COLORS[df.team.iloc[0]]
来完成,但它只传递一个值,即第一个团队,这就是为什么你得到一种颜色的整个图。我将DataFrame按团队分组,然后将分组的DataFrame重新分组,并为每个团队绘制一条新线。现在您可以在
COLORS
字典上使用.get()
函数并获得正确的颜色。看看这是否对你有帮助: