我试图在熊猫中绘制一些数据,并且内置的绘图功能可以方便地在每列中绘制一行。我要做的是根据我进行的分类为每行手动分配颜色。
以下作品:
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)
我的问题是:
编辑:
我意识到即使在第一种情况下,代码也无法实现我期望的功能。似乎pandas仅在两者都是从0开始的整数索引时才匹配DataFrame和Series的索引。如果不是,则抛出KeyError,或者如果索引为str则使用元素的顺序。
这个对吗?有没有办法匹配Series和DataFrame索引?还是必须确保以正确的顺序传递颜色列表?
这是怎么回事
关键字参数color继承自matplotlib.pyplot.plot()。文档中的详细信息并未明确指出在打印时可以放入颜色列表。鉴于color是matplotlib的关键字参数,我建议不要使用Pandas Series来保存颜色值。
我该如何工作?
使用列表而不是系列。如果您使用的系列的索引旨在使DataFrame的列与特定颜色匹配,则需要首先对系列进行排序。如果列不按顺序排列,则还需要对列进行排序。
# Option 1 s = s.sort_index() df.plot(color = s.values) # as per Fiabetto's answer # Option 2 df.plot(color = ['c', 'y']) # other method