TypeError: объект 'float' не может быть подписан при попытке создать гистограмму в matplotlib - PullRequest
0 голосов
/ 08 ноября 2011

Когда я пытаюсь запустить следующий код

import matplotlib.pyplot as plt
import math
import numpy as np
from numpy.random import normal

masses = []

f = open( 'myfile.txt','r')
f.readline()
for line in f:
   if line != ' ':      
   line = line.strip()    # Strips end of line character 

   columns = line.split() # Splits into coloumn 
   mass = columns[8]      # Column which contains mass values
   mass = float(mass)
   masses.append(mass)
   mass = math.log10(mass)
   #print(mass)


#gaussian_numbers = #normal(size=1000)
plt.hist(mass, bins = 50, normed = True)
plt.title("Gaussian Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

Я получаю эту ошибку

Traceback (most recent call last):
  File "C:\Documents and Settings\Khary\My Documents\Python\HALOMASS_READER_PLOTTER.py",  line 23, in <module>
plt.hist(mass, bins = 50, normed = True)
  File "C:\Python32\lib\site-packages\matplotlib\pyplot.py", line 2191, in hist
ret = ax.hist(x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, **kwargs)
File "C:\Python32\lib\site-packages\matplotlib\axes.py", line 7606, in hist
if isinstance(x, np.ndarray) or not iterable(x[0]):
TypeError: 'float' object is not subscriptable 

Можно ли использовать поплавки при выполнении гистограмм или я что-то упускаю? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Исходя из документов , я довольно уверен, mass не принадлежит там в вызове hist() ...

0 голосов
/ 08 ноября 2011

@ Игнасио поставил правильный диагноз: вы указали неверную переменную для вызова hist (). Вы перепутали единственную переменную с плавающей точкой mass для переменной списка, содержащей несколько чисел с плавающей точкой mass hist () требует список или любой итеративный контейнер Python. Ваш код может быть улучшен путем удаления некоторых ненужных вещей и предотвращения путаницы. В качестве общего совета опасно использовать имя переменной, когда также используются множественные / прошедшие напряжение формы.

import matplotlib.pyplot as plt

mass_list = []

with open('myfile.txt', 'r') as f:
    data = [line.strip().split() for line in f.readlines()]
    mass_list.extend([float(row[8]) for row in data if row[0] != ''])

plt.hist(mass_list, bins=50, normed=True)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...