在Pandas DataFrame图中指定y数组和绘图标签会更改数据框的索引标签/名称吗?

时间:2014-09-26 21:29:14

标签: python matplotlib pandas

我有一个pandas DataFrame,索引标签名为'RowNumber'。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(data=np.random.rand(5,3), index=np.arange(5), columns=['A', 'B', 'C'])
df.index.name='RowNumber'
df

Out[1]: 
                  A         B         C
RowNumber                              
0          0.994063  0.068659  0.158425
1          0.116639  0.109248  0.160374
2          0.086689  0.269934  0.060204
3          0.794417  0.988650  0.306970
4          0.193915  0.230677  0.414131

我用图例绘制了一个错误栏图。

df.plot(y='B', yerr='C', label='Test')
plt.legend(loc=0)

enter image description here

但是这会将index_column的标签/名称更改为“Test”。

             A         B         C
Test                              
0     0.994063  0.068659  0.158425
1     0.116639  0.109248  0.160374
2     0.086689  0.269934  0.060204
3     0.794417  0.988650  0.306970
4     0.193915  0.230677  0.414131

为什么?我想绘制一个数据帧,而不是更改它。 即使使用简单的线图,不仅仅是errorplot,只要指定y=...label=...,就会发生这种情况。

1 个答案:

答案 0 :(得分:2)

在调用df.plot时设置label参数会改变DataFrame的索引名称(source code):

        label = kwds.pop('label', label)
        ser = frame[y]
        ser.index.name = label

您可能希望将其提升为an issue,但鉴于这是绘图方法的工作方式,您可以在调用plt.legend时设置标签:

df.plot(y='B', yerr='C')
plt.legend( ('Test',), loc=0 )
plt.show()

enter image description here

这使df.index.name保持不变。

In [10]: df.index.name
Out[10]: 'RowNumber'