2016-06-12 2 views
2

Я работаю над созданием гистограмм для выходных данных из моделирования CFD.Зацикливание над списком векторов для создания гистограмм для каждого вектора

Поскольку выходные переменные намного больше одного, я хочу перебрать список, содержащий выходные переменные, и создать отдельную цифру для каждой гистограммы выходной переменной.

Вот пример кода моего рабочего до сих пор:

import numpy as np 
import matplotlib.pyplot as plt 
import os 

# set default directory and import data 

path="C:/Users/Pacman/Data files" 
os.chdir(path) 
data =np.genfromtxt('MCS_10000cases_Sc_B.txt') 

#Create output vectors 

Power=data[:,][:,9] 
Per_Lk=data[:,][:,10] 
VFR_Fan=data[:,][:,11] 
VFR_MF=data[:,][:,13] 
TP=data[:,][:,14] 

#Plotting histgram 

numbins=40 
var=['Power','Per_Lk','VFR_Fan','VFR_MF','TP'] 

for i in var: 
    plt.hist(i,numbins,color='g') 
    plt.figure() 
    plt.show() 

Когда я запускаю код, приведенный выше это дает мне длинную ошибку, которая заканчивается следующим утверждением:

TypeError: len() of unsized object

Когда Я пытаюсь построить гистограммы один за другим, без цикла это прекрасно работает. Я попытался найти ошибку и реализовать некоторые исправления, но это не помогло.

Любые идеи для исправлений будут высоко оценены.

ответ

3

Дайте этот код попробовать:

var = {'Power': data[:,][:,9], 
     'Per_Lk': data[:,][:,10], 
     'VFR_Fan': data[:,][:,11], 
     'VFR_MF': data[:,][:,13], 
     'TP': =data[:,][:,14], 
     } 
numbins = 40 

for i in var: 
    plt.hist(var[i], numbins, color='g') 
    plt.figure() 
    plt.show() 
+0

Вы могли бы получить тот же результат, вводя небольшой твик в исходном коде, а именно '' plt.hist (Eval (я), numbins, цвет =» g ') '', но я думаю, что предпочтительнее не использовать функцию '' eval() '' в этом конкретном случае. – Tonechas

+0

Работает отлично. Спасибо! Хотя я все еще не могу понять, что не является переменной «i», относящейся к векторам «var» в моем коде. Будет здорово, если вы сможете немного разобраться в этом. – SAkht312

+1

В вашем исходном коде '' var'' - это список строк, поэтому индексная переменная '' i'' имеет значение '' 'Power''' на первой итерации '' 'Per_Lk''' в второй и т. д., тогда как в моем решении '' var'' определяется как словарь, так что '' i'' принимает одинаковые значения во всем цикле for, как в вашем коде, и '' var [i] ' 'относится к соответствующим данным. – Tonechas