Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫将数据框绘制为未知项的分散投诉_Python_Pandas_Matplotlib - Fatal编程技术网

Python 熊猫将数据框绘制为未知项的分散投诉

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的数千个数据点:

    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轴上文本标签的顺序是否重要?