在pandas中分配线条颜色
我试图在熊猫中绘制一些数据,并且内置的绘图功能可以方便地在每列中绘制一行。我要做的是根据我进行的分类为每行手动分配颜色。
以下作品:
df = pd.DataFrame({'1': [1, 2, 3, 4], '2': [1, 2, 1, 2]})s = pd.Series(['c','y'], index=['1','2'])
df.plot(color = s)
但是,当我的索引是整数时,它将不再起作用并抛出为KeyError:
df = pd.DataFrame({1: [1, 2, 3, 4], 2: [1, 2, 1, 2]})s = pd.Series(['c','y'], index=[1,2])
df.plot(color = s)
我的理解是,当使用整数索引时,它必须以某种方式从0开始。这是我的猜测,因为以下内容同样适用:
df = pd.DataFrame({0: [1, 2, 3, 4], 1: [1, 2, 1, 2]})s = pd.Series(['c','y'], index=[1,0])
df.plot(color = s)
我的问题是:
- 这是怎么回事
- 假设我有一个不是从0开始或不是由连续数字组成的整数索引,那么我如何进行这项工作而不必将索引转换为从0开始的字符串或重新索引?
编辑:
我意识到即使在第一种情况下,代码也无法实现我期望的功能。似乎pandas仅在两者都是从0开始的整数索引时才匹配DataFrame和Series的索引。如果不是,则抛出KeyError,或者如果索引为str则使用元素的顺序。
这个对吗?有没有办法匹配Series和DataFrame索引?还是必须确保以正确的顺序传递颜色列表?
回答:
关键字参数color继承自matplotlib.pyplot.plot()。文档中的详细信息并未明确指出在打印时可以放入颜色列表。鉴于color是matplotlib的关键字参数,我建议不要使用Pandas
Series来保存颜色值。
使用列表而不是系列。如果您使用的系列的索引旨在使DataFrame的列与特定颜色匹配,则需要首先对系列进行排序。如果列不按顺序排列,则还需要对列进行排序。
# Option 1s = s.sort_index()
df.plot(color = s.values) # as per Fiabetto's answer
# Option 2
df.plot(color = ['c', 'y']) # other method
以上是 在pandas中分配线条颜色 的全部内容, 来源链接: utcz.com/qa/403026.html