对于一系列类型的文本标签,我有两个值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
我想不将各个值与线连接,只是将Tm1和Tm2值作为不同颜色的散点图。
当我尝试使用
进行绘图时df2.reset_index().plot(kind="scatter",x='index',y=["Tm1"])
我收到错误:
KeyError: u'no item named index'
我知道这是一个非常基本的绘图命令,但很抱歉我不知道如何在pandas / matplotlib中实现这一点。 scatter命令确实需要x和y值,但我在某种程度上错过了一些关键的pandas概念,以了解如何执行此操作。
答案 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进行过测试,效果很好
对于您提供的示例数据,这会产生: