【问题标题】:Ploting Matplotlib Histogram in python在 python 中绘制 Matplotlib 直方图
【发布时间】:2017-01-17 07:20:22
【问题描述】:

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

代码

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 .......
 ..........

【问题讨论】:

    标签: python matplotlib histogram


    【解决方案1】:

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

    TypeError: len() of unsized object
    

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

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

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

    【讨论】: