2013-05-10 76 views
0

当绘制numpy.genfromtxt命令返回的数据时,我无法弄清楚如何在matplotlib中使用“名称”。 场景: 1.我有一个带有列标题和行值的文件 2.我不知道列标题事先 - 它们以编程方式生成,并可能在程序运行期间更改 3.我需要阅读数据和列标题,绘制它们并产生相应的图例。将csv数据导入到matplotlib时如何使用名称

我可以用自己的名字与读取的数据列:

dataArray = numpy.genfromtxt('myData.csv', delimiter = ',', names = True) 

,然后用

matplotlib.plot.plot(dataArray) 
matplotlib.plot.show() 

画出他们,但我怎么产生合适的传奇?我认为没有参数的图例命令就足够了(例如matplotlib.plot.legend()),但情况并非如此。我得到一个错误,而不是:

/usr/lib/python2.7/site-packages/matplotlib/axes.py:4601:UserWarning:找不到标记的对象。在个人地块上使用标签='...'kwarg。 warnings.warn(“没有找到标记对象。”

换句话说:哪里做这些“名字”去,我怎么能找回他们对谷歌,matplotlib网站,numy现场多次搜索没有产生结果

+0

你能展示你的数据摘录吗? – joris 2013-05-10 18:04:50

回答

2

你必须提供在plot功能要绘制每一行label=..关键字,如matplotlib不会自动从numpy的结构化阵列检测的名字(你也可以用大熊猫,这是这种情况,见下文)。

说例如你的数据是这样的:

from StringIO import StringIO 

myDatacsv = StringIO("""a, b, c 
1, 2, 3 
2, 3, 4 
3, 4, 5""") 

阅读他们numpy.genfromtxt产生一个结构数组:

>>> import numpy as np 
>>> dataArray = np.genfromtxt(myDatacsv, delimiter = ',', names = True) 
>>> dataArray 
array([(1.0, 2.0, 3.0), (2.0, 3.0, 4.0), (3.0, 4.0, 5.0)], 
     dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')]) 

(在你的情况将会有"myData.csv"代替myDatacsv关当然,这只是为了让这个例子)
现在你可以遍历的列名和剧情它们:

import matplotlib.pyplot as plt 

plt.figure() 
for col_name in dataArray.dtype.names: 
    plt.plot(dataArray[col_name], label=col_name) 

plt.legend() 
plt.show() 

这将产生像这样的数字:

enter image description here

有了大熊猫,这将产生同图(自动绘制数据帧的所有列并将其添加到一个传说):

import pandas as pd 

# one of the following will do (reading it with pandas, or converting 
# from the numpy array to pandas dataframe) 
data_df = pd.read_csv(myDatacsv) 
data_df = pd.DataFrame(dataArray) 

data_df.plot() 

有关的更多信息熊猫,请参阅:http://pandas.pydata.org/

+0

谢谢! dtype位是我错过的。我不知道这是专栏名称的最终名称。还要感谢指向熊猫的指针。我会检查出来的。 – stefano 2013-05-10 19:11:16

+0

令人敬畏的教程 - 谢谢! – Matt 2015-02-18 20:39:08