2016-07-19 35 views
0

Ich arbeite an der Automatisierung von Plotfunktionen für Metabolomics-Daten mit Bokeh. Derzeit versuche ich, meinen Datenrahmen aus CSV einzulesen und durch die Spalten zu laufen, die Box-Plots für jeden Metaboliten (Spalte) erzeugen.Python: Übergeben von Spaltendaten von Pandas df an Bokeh-Plotfunktion

Ich habe ein Beispiel df die wie folgt aussieht:

Sample Group AMP  ADP  ATP 
1A  A  239847 239084 987374 
1B  A  245098 241210 988950 
2A  B  238759 200554 921032 
2B  B  230029 215408 89980 

Hier ist, was mein Code wie folgt aussieht:

import pandas 
from bokeh.plotting import figure, output_file, show, save 
from bokeh.charts import BoxPlot 

df = pandas.read_csv("testdata_2.csv") 

for colname, col in df.iteritems(): 
p = BoxPlot(df, values=df[colname], label='Group', xlabel='Group', ylabel='Peak Area', 
      title=colname) 
    output_file("boxplot.html") 
    show(p) 

dies ein Fehler erzeugt:

raise ValueError("expected an element of either %s, got %r" % (nice_join(self.type_params), value)) 

ValueError: expected an element of either Column Name or Column String or List(Column Name or Column String 

Es scheint, Diese Einstellung values=df[colname] ist das Problem. Wenn ich es durch values=df['colname'] ersetze, gibt es mir einen Schlüsselfehler für colname. Ich kann gut plotten, wenn ich eine bestimmte Spalte wie values='ATP' angeben, aber ich muss in der Lage sein, eine Schleife durch alle Spalten durchlaufen zu lassen.

Irgendeine Anleitung? Ist das überhaupt der beste Ansatz?

Vielen Dank im Voraus.

+0

Sie müssen den Namen der Spalte an Werte übergeben, dh 'Werte = Spaltenname' – bigreddot

+0

Ich habe versucht, beide' Werte = Spaltenname' und 'Werte = 'Spaltenname''. Beide erzeugen Fehler. – JeremyD

Antwort

2

Wenn Sie sie horizontal organisieren möchten, können Sie verschiedene Diagramme erstellen, und dann könnte man zum Beispiel hplot von bokeh.io wie folgt verwenden:

import pandas 
from bokeh.plotting import figure, output_file, show, save 
from bokeh.charts import BoxPlot 
from bokeh.io import hplot 

df = pandas.read_csv("testdata_2.csv") 

p = [] 
for colname in ['AMP','ADP','ATP']: 
    p += [BoxPlot(df, values=colname, label='Group', xlabel='Group', 
      ylabel='Peak Area',title=colname, width=250,height=250)] 

output_file("boxplot.html") 
show(hplot(*p)) 

Für Ihre speziellen Beispiel erhalte ich: enter image description here

+0

Bitte fordern Sie Hilfe für meine Anfrage zu http://stackoverflow.com/questions/38709991/group-by-hours-and-plot-in-bokeh –