2017-01-17 7 views
0

Я столкнулся с ошибкой, когда попытался построить гистограмму в python. Не могли бы вы помочь мне решить эту ошибку? Я думаю, что это не большая проблема, но я могу найти решение. :(Графический график Matplotlib в 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 ....... 
.......... 

ответ

0

Try для отладки кода Вы найдете y1 список строк , поэтому plt.hist(y1) поднимет

TypeError: len() of unsized object 

TypeError возникает, когда операция или функция применяется к объекту несоответствующего типа.

Это означает, что вы должны использовать float или int, поэтому попробуйте запустить это:

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