2016-06-12 11 views
2

Ich arbeite an der Erstellung von Histogrammen für Ausgabedaten aus einer CFD-Simulation.Looping über eine Liste von Vektoren, um Histogramme für jeden Vektor zu erstellen

Da Ausgangsvariablen viel mehr als eins sind, möchte ich die Liste mit den Ausgangsvariablen überlappen und für jedes Histogramm der Ausgangsvariablen eine separate Zahl erstellen.

Hier ist ein Beispielcode meiner bisherigen Arbeit:

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

Wenn ich den Code ausführen oben gezeigt, gibt mir einen langen Fehler, die mit der folgenden Aussage endet:

TypeError: len() of unsized object

Wenn Ich versuche, Histogramme einzeln zu zeichnen, ohne die Schleife funktioniert es gut. Ich habe versucht, den Fehler nachzuschlagen und einige Korrekturen zu implementieren, aber es hat nicht geholfen.

Alle Ideen für die Korrekturen werden sehr geschätzt.

Antwort

3

Geben Sie diesen Code einen Versuch:

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

Sie haben durch die Einführung ein leichtes zwicken in Ihrem ursprünglichen Code, nämlich '' plt.hist (eval (i), numbins, color =‘das gleiche Ergebnis erhalten könnten g ') '', aber ich denke, es ist besser, in diesem Fall nicht die Funktion '' eval() '' zu verwenden. – Tonechas

+0

Funktioniert perfekt. Vielen Dank! Obwohl ich immer noch nicht verstehen kann, was nicht die Variable "i" ist, die sich in meinem Code auf die Vektoren "var" bezieht. Es wird großartig sein, wenn Sie ein wenig darauf eingehen können. – SAkht312

+1

In Ihrem ursprünglichen Code '' var'' ist eine Liste von Strings, und daher hat die Indexvariable '' i' 'in der ersten Iteration den Wert' ''Power''',' '' Per_Lk''' in der Zweitens und so weiter, während in meiner Lösung "var" als Wörterbuch definiert ist, so dass "i" genau die gleichen Werte in der for-Schleife wie in Ihrem Code und "var [i]" annimmt 'bezieht sich auf die entsprechenden Daten. – Tonechas

Verwandte Themen