2017-01-17 174 views
0

我试图在python中绘制直方图时遇到了一个错误。 你能帮我解决这个错误吗? 我认为这不是一个大问题,但我可以找到解决方案。 :(在python中绘制Matplotlib直方图

代码

import matplotlib.pyplot as plt 
import csv 
import sys 

def analyze(): 
# datafile = 'test.csv' 
    datafile = sys.argv[1] 
    pieces = [] 
    with open(datafile, 'rt') as f: 
     data = csv.reader(f,delimiter = '\t') 
     for d in data: 
      pieces.append(d) 

    x = [op for op, response, interval in pieces] 
    y1 = [interval for op, response, interval in pieces] 


    plt.figure() 
    plt.hist(y1) 
    plt.show() 

if __name__ == '__main__': 
    analyze() 

错误消息:

File "./scripts/plot_histo.py", line 27, in <module> 
    analyze() 
    File "./scripts/plot_histo.py", line 23, in analyze 
    plt.hist(y1) 
    File "/usr/local/anaconda2/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2958, in hist 
    stacked=stacked, data=data, **kwargs) 
    File "/usr/local/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py", line 1812, in inner 
    return func(ax, *args, **kwargs) 
    File "/usr/local/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 5995, in hist 
    if len(xi) > 0: 
TypeError: len() of unsized object 

数据文件格式:

653070    232.93    104981.00 
653071    277.94    104981.00 
653072    232.93    12695.00 
653073    232.93    25878.00 
653074    232.93    32714.00 
653075    232.93    19532.00 
653076    232.93    19532.00 
653077    232.93    32715.00 
653078    232.93    32715.00 
653079    232.93    45899.00 
653080    232.93    65430.00 
653081    232.93    65430.00 
Continued ....... 
.......... 

回答

0

尝试调试你的代码,你会发现y1是一个字符串列表,所以plt.hist(y1)会增加

TypeError: len() of unsized object 

将操作或函数应用于 不适当类型的对象时引发的TypeError。

这意味着你应该使用floatint,所以尝试运行此:

y1 = [float(interval) for op, response, interval in pieces]