2015-04-18 7 views
5

Mam dataFrame pandy, że jestem kreślenia z Seaborn:działka wiele kolumn na tym samym wykresie 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)) 

Działa to doskonale i daje mi jeden wykres dla każdego „CHR”, który jest w „CHR” kolumna. Chciałbym jednak, aby każdy wykres zawierał wiele kolumn. Obecnie wyświetlana jest tylko jedna, zwana "bergC9". Chcę umieścić więcej kolumn na tym samym wykresie w różnych kolorach.

Wszelkie pomysły?

Dzięki!

Edycja: plik danych wejściowych

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 

Edycja: Chciałbym rozrzutu który ma Pos jak na osi x, a bergB7, bergC9, EvolB20 etc., które wszystkie są „odmiany” jako oś y , a więc kilka szczepów na tym samym wykresie. Udało mi się to osiągnąć poprzez ponowne sformatowanie mojego zestawu danych, aby teraz miał parametr "naprężenie" lub kolumnę i łączone wszystkie dane y. Teraz mogę użyć składni hue z "strain". Nie chciałbym reformować wszystkich moich zbiorów danych. Pomyślałem, że może być możliwe utworzenie pętli, która będzie odwoływać się do wszystkich kolumn, które chcę narysować, ale wypróbowałem kilka składni bezskutecznie. Są inne sposoby, o których myślałem, aby to osiągnąć, ale te tworzą nowe zbiory danych i wiem, że nie jest to sposób na programowanie. Jestem nowym użytkownikiem i chciałbym zacząć poprawnie.

To właśnie wyjście powinno wyglądać (podzbioru panelu 15 wykresu pokazanego): (I nie można umieścić obraz, ponieważ mój „reputacja” nie jest wystarczająco wysoka)

+0

'może sns.factorplot' być łatwiejsze. Sprawdź argumenty "hue" oraz "x". – cphlewis

+0

@cphlewis o ile mogę powiedzieć, barwa może być używana do grupowania zmiennej kolumny, ale nie dla wielu zmiennych kolumn. sns.factorplot jest dla zmiennych jakościowych. Mam 10 kolumn z liczbami całkowitymi, które chcę wydrukować na osi Y. Jedna oś X, "pos" z 10 różnymi zestawami danych y do wykreślenia. – pinkvirus

+0

Nie możemy odczytać twojego umysłu; opublikuj głowę swojego zbioru danych. – cphlewis

Odpowiedz

6

Edytowane dane mieć dwa chr przypadki . Powinien działać dla dowolnej liczby kolumn "naprężenia". Dane wymagają ponownego formatowania; z Seaborn dokumentacji:

Aby wykorzystać te możliwości, dane musi być w Pandy DataFrame i musi ona przyjąć postać co Hadley Whickam nazywa „schludny” dane. W skrócie oznacza to, że twoja ramka danych powinna mieć taką strukturę, że każda kolumna jest zmienną, a każdy wiersz jest obserwacją.

pandy ale robi to w prosty sposób:

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