Ploting Matplotlib Histogram in python

无人久伴 提交于 2019-12-25 04:30:25

问题


I faced an error when I tried to plot histogram in python. Could you please help me to solve this error? I think it is not a big issue, but I can find the solution yet. :(

Code

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()

Error Message :

 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

Data file format :

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

回答1:


Try to debug your code. You will find y1 is a list of strings, so plt.hist(y1) will raise

TypeError: len() of unsized object

TypeError raised when an operation or function is applied to an object of inappropriate type.

That means you should use float or int, so try to run this:

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


来源:https://stackoverflow.com/questions/41691123/ploting-matplotlib-histogram-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!