将csv数据导入到matplotlib时如何使用名称
当绘制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现场多次搜索没有产生结果
。
你必须提供在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()
这将产生像这样的数字:
有了大熊猫,这将产生同图(自动绘制数据帧的所有列并将其添加到一个传说):
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/
你能展示你的数据摘录吗? – joris 2013-05-10 18:04:50