Pandas将数据帧绘制为散布抱怨未知项

时间:2015-06-10 07:35:32

标签: python pandas matplotlib

对于一系列类型的文本标签,我有两个值Tm1和Tm2的数千个数据点:

    Tm1 Tm2
ID      
A01 51  NaN
A03 51  NaN
A05 47  52
A07 47  52
A09 49  NaN

我设法使用csv中的值创建一个pandas DataFrame。我现在想要将Tm1和Tm2作为y值绘制为散点图中的文本ID作为x值,在pandas / matplotlib中使用不同的颜色点。

对于这样的测试用例,我可以得到一个线图

from pandas import *
df2= DataFrame([52,54,56],index=["A01","A02","A03"],columns=["Tm1"])
df2["Tm2"] = [None,42,None]


Tm1 Tm2
A01 52  NaN
A02 54  42
A03 56  NaN

Plot obtained from DataFrame

我想不将各个值与线连接,只是将Tm1和Tm2值作为不同颜色的散点图。

当我尝试使用

进行绘图时
df2.reset_index().plot(kind="scatter",x='index',y=["Tm1"])

我收到错误:

KeyError: u'no item named index'

我知道这是一个非常基本的绘图命令,但很抱歉我不知道如何在pandas / matplotlib中实现这一点。 scatter命令确实需要x和y值,但我在某种程度上错过了一些关键的pandas概念,以了解如何执行此操作。

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是你试图针对非数字系列绘制散点图。这将失败 - 虽然你给出的错误信息是如此误导,以至于它可能被视为一个错误。

但是,您可以明确地将xticks设置为每个类别使用一个,并使用second argument of xticks设置xtick标签。像这样:

import matplotlib.pyplot as plt

df1 = df2.reset_index() #df1 will have a numeric index, and a 
                        #column named 'index' containing the index labels from df2
plt.scatter(df1.index,df1['Tm1'],c='b',label='Tm1')
plt.scatter(df1.index,df1['Tm2'],c='r',label='Tm2')
plt.legend(loc=4) # Optional - show labelled legend, loc=4 puts it at bottom right
plt.xticks(df1.index,df1['index']) # explicitly set one tick per category and label them
                                   # according to the labels in column df1['index']
plt.show()

我刚刚用1.4.3进行过测试,效果很好

对于您提供的示例数据,这会产生:

enter image description here