Python 熊猫将数据框绘制为未知项的分散投诉
对于一系列类型的文本标签,我有两个值Tm1和Tm2的数千个数据点:Python 熊猫将数据框绘制为未知项的分散投诉,python,pandas,matplotlib,Python,Pandas,Matplotlib,对于一系列类型的文本标签,我有两个值Tm1和Tm2的数千个数据点: Tm1 Tm2 ID A01 51 NaN A03 51 NaN A05 47 52 A07 47 52 A09 49 NaN 我设法用csv中的值创建了一个熊猫数据框。现在,我想在散点图中将Tm1和Tm2作为y值与文本ID的作为x值进行对比,在pandas/matplotlib中使用不同的颜色点 使用这样的测试用例,我可以得到一个折线图 from pandas import * df2= Dat
Tm1 Tm2
ID
A01 51 NaN
A03 51 NaN
A05 47 52
A07 47 52
A09 49 NaN
我设法用csv中的值创建了一个熊猫数据框。现在,我想在散点图中将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中实现这一点。“散布”命令确实需要一个x和y值,但在理解如何执行此操作时,我不知何故遗漏了一些关键概念。我认为这里的问题是,您试图根据非数字序列绘制散布图。这将失败-尽管您收到的错误消息具有误导性,可能会被视为错误 但是,您可以明确地将xtick设置为每个类别使用一个,并使用设置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对它进行了测试,效果不错
对于您给出的示例数据,这将产生:
您使用的熊猫是什么版本?我使用的是
0.16.1
,我可以重现您的错误,这看起来像是一个带有散点图的bug,因为kind='barh'
工作正常我使用的是pandas版本:'0.13.1'和matplotlib版本'1.3.1'。我的matplotlib版本是1.4.3,所以我认为升级不会解决这个问题,对我来说这看起来很像一个bug,在我看来,你的代码似乎很好,但我并不认为这会起作用——尽管它给出的错误是误导性的。我不认为你可以绘制一个散点图,其中x轴是字符串类别,而不是数字(当然,如果您直接将此类数据传递到matplotlib.pyplot.scatter
则会失败。根据上面的评论,绘制条形图
类是可行的。如果我理解正确,您希望每个类别为Tm1和Tm2分别提供一个color1和color2标记,对吗?x轴上文本标签的顺序是否重要?