2014-06-19 8 views
5

Wykreślam wykresy rozrzutu z DF przy użyciu matplotlib. W celu uzyskania różnych kolorach dla każdego zestawu danych, robię dwie osobne połączenia do plt.scatter:Czy istnieje sposób, aby znacznik lub kolor plamki matplotlib był zgodny ze zmienną dyskretną w innej kolumnie?

plt.scatter(zzz['HFmV'], zzz['LFmV'], label = dut_groups[0], color = 'r') 
plt.scatter(qqq['HFmV'], qqq['LFmV'], label = dut_groups[1], color = 'b') 
plt.legend() 
plt.show() 

To daje mi pożądaną zależność kolorów, ale naprawdę, co byłoby idealnym rozwiązaniem jest, czy mogę po prostu pandy dać mi rozrzutu z kilku zestawów danych na tej samej działce przez coś jak

df.plot (rodzaj rozproszenia = (X, Y, kolor = df.Group, marker = df.Head)

Podobno istnieje nie ma takiego zwierzęcia (przynajmniej takiego, które mogłem znaleźć) Więc najlepszą rzeczą w moim umyśle byłoby umieszczenie wywołań plt.scatter w pętli, w której mógłbym zmienić kolor lub znacznik według jednego z wierszy (nie x lub y, ale inny wiersz). Jeśli wiersz, którego chcę użyć, był zmienną ciągłą, wygląda na to, że mógłbym użyć mapy kolorów, ale w moim przypadku wiersz, który muszę złożyć do sądu, to ciąg (kategoryczny typ zmiennej, a nie liczba).

Każda pomoc bardzo ceniona.

Odpowiedz

10

To, co robisz, prawie będzie działać, ale musisz przekazać color wektor kolorów, a nie tylko wektor zmiennych. Więc można zrobić:

color = df.Group.map({dut_groups[0]: "r", dut_groups[1]: "b"}) 
plt.scatter(x, y, color=color) 

samo dotyczy stylu markera

Można również użyć seaborn zrobić kolor-mapowania zgodnie z oczekiwaniami (omówione here), choć nie zrobić marker mapowanie styl:

import seaborn as sns 
import pandas as pd 
from numpy.random import randn 

data = pd.DataFrame(dict(x=randn(40), y=randn(40), g=["a", "b"] * 20)) 
sns.lmplot("x", "y", hue="g", data=data, fit_reg=False) 

enter image description here

Powiązane problemy