2014-06-19 5 views
5

Ich mache Streudiagramme aus einem DF mit Matplotlib. Um verschiedene Farben für jeden Datensatz zu bekommen, mache ich zwei separate Anrufe plt.scatter:Gibt es eine Möglichkeit, Matplotlib Streudiagramm Marker oder Farbe nach einer diskreten Variable in einer anderen Spalte zu streuen?

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

Das gibt mir die Farbe Abhängigkeit erwünscht, aber wirklich, was ideal wäre, wenn ich nur Pandas bekommen könnte geben mir die Scatterplot mit mehreren Datensätzen auf dem gleichen Grundstück von so etwas wie

df.plot (Art = Streuung (x, y, color = df.Group, marker = df.Head)

Anscheinend gibt es kein solches Tier (zumindest das, was ich finden konnte.) Also, das nächste beste Ding in meinem Kopf wäre, die plt.scatter Anrufe in eine Schleife zu bringen, wo ich die Farbe oder Markierung variieren lassen könnte nach einer der Zeilen (nicht x oder y, sondern eine andere Zeile. Wenn die Zeile, die ich verwenden möchte, eine kontinuierliche Variable ist, sieht es so aus, als könnte ich eine Colormap verwenden, aber in meinem Fall ist die Zeile, die ich dafür verklagen muss, eine Zeichenfolge (kategorischer Variablentyp, keine Zahl).

Jede Hilfe sehr geschätzt.

Antwort

10

Was Sie tun, wird fast funktionieren, aber Sie müssen color einen Vektor von Farben übergeben, nicht nur ein Vektor von Variablen. So könnten Sie tun:

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

Das Gleiche gilt für den Marker Stil

Sie auch seaborn verwenden könnte die Farbe-Abbildung wie erwartet zu tun (wie here erörtert), obwohl es nicht Marker macht stil~~POS=TRUNC:

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

Verwandte Themen