2015-04-18 15 views
5

Ich habe einen Pandas Datenrahmen, die ich mit Seaborn bin Plotten:Grundstück mehrere Spalten auf derselben Grafik Seaborn

g = sns.FacetGrid(readCov, col='chr', col_wrap = 4, size=4) 
g.map(plt.scatter, 'pos', 'bergC9', hue = edgecolor='white') 
g.set(xlim= (0, 250000)) 

Dies funktioniert gut und gibt mir einen einzelnen Graphen für jeden ‚chr‘, die in der ‚chr‘ ist Säule. Ich möchte jedoch, dass jedes Diagramm mehrere Spalten enthält. Momentan wird nur einer angezeigt, der mit dem Namen 'bergC9'. Ich möchte mehr Spalten auf demselben Graphen mit verschiedenen Farben platzieren.

Irgendwelche Ideen?

Danke!

Bearbeiten: Eingabedatendatei

chr description pos bergB7 bergC9 EvolB20 
1 1 '"ID=PBANKA_010290;Name=PBANKA_010290;descript... 108389 0.785456 0.899275 0.803017 
2 1 '"ID=PBANKA_010300;Name=PBANKA_010300;descript... 117894 1.070673 0.964203 0.989372 
3 1 '"ID=PBANKA_010310;Name=PBANKA_010310;descript... 119281 1.031106 1.042189 0.883518 
4 1 '"ID=PBANKA_010320;Name=PBANKA_010320;descript... 122082 0.880109 1.031673 1.026539 
5 1 '"ID=PBANKA_010330;Name=PBANKA_010330;descript... 126075 0.948105 0.969198 0.849213 

EDIT: Ich möchte ein Streudiagramm mag das POS als x-Achse und bergB7, bergC9, EvolB20 usw., die alle 'Stämme', wie die y-Achse , also mehrere Stämme auf dem gleichen Graphen. Ich konnte dies erreichen, indem ich meinen Datensatz neu formatierte, so dass er jetzt einen "Dehnungs" -Parameter oder eine Spalte hat und alle Y-Daten verkettet sind. Jetzt kann ich die Farbton-Syntax mit 'strain' verwenden. Ich möchte nicht alle meine Datensätze neu formatieren müssen. Ich dachte, dass es möglich ist, eine Schleife zu erstellen, die auf alle Spalten verweisen würde, die ich geplottet haben möchte, aber ich habe mehrere Syntaxen vergeblich versucht. Es gibt andere Möglichkeiten, dies zu erreichen, aber diese erstellen neue Datensätze und ich weiß, dass das nicht programmatisch ist. Ich bin ein neuer Benutzer und möchte richtig anfangen.

Dies ist, was die Ausgabe wie (Teilmenge von 15 Diagrammanzeigefeld dargestellt) aussehen sollte: (ich das Bild nicht veröffentlichen kann, weil mein ‚Ruf‘ nicht hoch genug ist)

+0

'sns.factorplot' einfacher sein könnte. Überprüfen Sie sowohl die 'hue'- als auch die' x'-Argumente. – cphlewis

+0

@cphlewis soweit ich sagen kann Farbton kann für die Gruppierung einer Spaltenvariablen, aber nicht für mehrere Spaltenvariablen verwendet werden. sns.factorplot ist für kategoriale Variablen. Ich habe 10 Spalten mit ganzen Zahlen, die ich auf der Y-Achse zeichnen möchte. Eine x-Achse, 'pos' mit 10 verschiedenen y-Datensätzen zum Plotten. – pinkvirus

+0

Wir können Ihre Gedanken nicht lesen; Veröffentlichen Sie den Kopf Ihres Datensatzes. – cphlewis

Antwort

6

die Daten Edited zwei chr Fälle haben . Sollte für eine beliebige Anzahl von "Stämme" Spalten arbeiten. Die Daten müssen neu formatiert werden; von der Seaborn Dokumentation:

diese Funktionen nutzen zu können, haben Ihre Daten in einem Pandas Datenrahmen sein und muss die Form nehmen, was Hadley Whickam „ordentlich“ Datenanrufe. In kurz, das heißt, Ihr Datenrahmen sollte so strukturiert sein, dass jede Spalte eine Variable ist und jede Zeile eine Beobachtung ist.

aber Pandas macht es leicht:

import matplotlib.pyplot as plt 
import pandas as pd 
import seaborn as sns 
readCov = pd.DataFrame([ (1, '\'"ID=PBANKA_010290;Name=PBANKA_010290;descript...', 108389, 0.785456, 0.899275, 0.803017), 
     (1, '\'"ID=PBANKA_010300;Name=PBANKA_010300;descript...', 117894, 1.070673, 0.964203, 0.9893719999999999), 
     (1, '\'"ID=PBANKA_010310;Name=PBANKA_010310;descript...', 119281, 1.0311059999999999, 1.042189, 0.883518), 
     (2, '\'"ID=PBANKA_010320;Name=PBANKA_010320;descript...', 122082, 0.880109, 1.031673, 1.0265389999999999), 
     (2, '\'"ID=PBANKA_010330;Name=PBANKA_010330;descript...', 126075, 0.948105, 0.969198, 0.8492129999999999)], 
     columns=[u'chr', u'description', u'pos', u'bergB7', u'bergC9', u'EvolB20'], 
     ) 

meltCov = pd.melt(readCov,id_vars=['chr','description','pos'], var_name='strain') 
g = sns.FacetGrid(meltCov, col='chr', hue='strain') 
g.map(plt.scatter, 'pos','value') 
g.set_xticklabels(rotation=45) 
g.add_legend() 

#this plots a figure per script automatically 
from os.path import realpath, basename 
s = basename(realpath(__file__)) 
fig = plt.gcf() 
fig.savefig(s.split('.')[0]) 
plt.show() 

enter image description here

Verwandte Themen