使用输入文件在Matplotlib中绘制直方图
我想用Matplotlib从一个包含原始数据的输入文件(.txt格式)制作一个直方图。但是我在引用这个输入文件时遇到了问题。我觉得这应该是一个比较简单的程序。有没有Matplotlib方面的高手能帮帮我?
我不是在问代码,只希望一些建议能让我找到正确的方向!
2 个回答
0
你不能直接让matplotlib从一个输入文件中生成直方图——你需要自己打开这个文件,并从中获取数据。怎么做取决于文件的格式。如果这个文件每一行只有一个数字,你可以逐行读取,使用strip()
去掉空格和换行,然后用float()
把它转换成数字。
9
我建议使用loadtxt,这个函数其实是在NumPy库里。虽然Matplotlib里也有相关的函数(比如csv2rec),但Matplotlib现在主要是统一使用loadtxt。
它的工作原理是这样的:
from matplotlib import pyplot as PLT
with open('name_of_your_file.csv') as f:
v = NP.loadtxt(f, delimiter=",", dtype='float', comments="#", skiprows=1, usecols=None)
'v'是从'loadtxt'返回的对象,它是一个n x m的NumPy数组。
'loadtxt'可以接受一个文件或者文件描述符。上面的例子展示了大部分的方法参数。'skiprows'是一个整数,表示从顶部开始你想跳过的行数;通常我们会把它设置为"1",这样就可以跳过表头那一行;'usecols'从'0'开始,是一个列的列表,列出你想包含的列(默认是'None',意思是'包含所有')。其他参数的用法也很简单。
如果要用这些数据绘制一个直方图,可以这样做:
from matplotlib import pyplot as PLT
v_hist = NP.ravel(v) # 'flatten' v
fig = PLT.figure()
ax1 = fig.add_subplot(111)
n, bins, patches = ax1.hist(v_hist, bins=50, normed=1, facecolor='green')
PLT.show()