Ich habe diesen Datenrahmen, diamonds
der sich aus Variablen wie zusammensetzt (carat, price, color)
, und ich möchte für jeden ein Streudiagramm von price
bis zeichnen , was bedeutet, dass verschiedene unterschiedliche Farben im Diagramm haben.carat
color
color
Dies ist leicht in R
mit ggplot
:
ggplot(aes(x=carat, y=price, color=color), #by setting color=color, ggplot automatically draw in different colors
data=diamonds) + geom_point(stat='summary', fun.y=median)
Ich frage mich, wie das in Python mit gemacht werden könnte matplotlib
.
PS:
Ich kenne mich mit zusätzlichen Plot- Paketen wie seaborn
und aus ggplot for python
, und ich bevorzuge sie nicht. Ich möchte nur herausfinden, ob es möglich ist, die Arbeit matplotlib
alleine zu erledigen
matplotlib
pandas
visualization
Avocado
quelle
quelle
Antworten:
Sie können
plt.scatter
einc
Argument übergeben, mit dem Sie die Farben auswählen können. Der folgende Code definiert eincolors
Wörterbuch, um Ihre Diamantfarben den Plotfarben zuzuordnen.df['color'].apply(lambda x: colors[x])
Ordnet die Farben effektiv von "Diamant" bis "Plotten" zu.(Verzeihen Sie mir, dass ich kein weiteres Beispielbild erstellt habe. Ich denke, 2 ist genug: P)
Mit
seaborn
Sie können
seaborn
einen Wrapper verwendenmatplotlib
, der es standardmäßig hübscher aussehen lässt (eher meinungsbasiert, ich weiß: P), aber auch einige Plotfunktionen hinzufügt.Hierfür können Sie
seaborn.lmplot
mit verwendenfit_reg=False
(was verhindert, dass automatisch eine Regression durchgeführt wird).Der folgende Code verwendet einen Beispieldatensatz. Durch Auswahl dieser
hue='color'
Option weisen Sie seaborn an, Ihren Datenrahmen anhand Ihrer Farben aufzuteilen und dann jeden einzelnen zu zeichnen.Ohne zu
seaborn
benutzenpandas.groupby
Wenn Sie Seaborn nicht verwenden möchten, können Sie
pandas.groupby
die Farben allein verwenden und sie dann nur mit matplotlib zeichnen. Sie müssen jedoch die Farben manuell zuweisen. Ich habe unten ein Beispiel hinzugefügt:Dieser Code nimmt denselben DataFrame wie oben an und gruppiert ihn dann basierend auf
color
. Anschließend werden diese Gruppen durchlaufen und für jede Gruppe geplottet. Um eine Farbe auszuwählen, habe ich eincolors
Wörterbuch erstellt, das die Diamantfarbe (zum BeispielD
) einer echten Farbe (zum Beispielred
) zuordnen kann .quelle
groupby
könnte ich das tun, also gibt es eine solche Funktionmatplotlib
, die automatisch für verschiedene Ebenen einer Kategorie mit unterschiedlichen Farben zeichnen kann, oder?groupby
Beispiel.ax.scatter
Wie würden Sie mit der ersten Methode Legenden hinzufügen? Ich versuche zu verwendenlabel=df['color']
und dannplt.legend()
ohne Erfolg.ax.scatter(df['carat'], df['price'], c=df['color'].apply(lambda x: colors[x]))
zuax.scatter(df['carat'], df['price'], c=df['color'].map(colors)
Hier ist eine prägnante und generische Lösung für die Verwendung einer Farbpalette für Meeresbewohner.
Zuerst finden Sie eine Farbpalette Sie mögen und es optional visualisieren:
Dann können Sie es
matplotlib
damit verwenden:quelle
8
Insns.color_palette("Set2", 8)
durch ersetzenlen(color_labels)
.Mit Altair .
quelle
Ich hatte die gleiche Frage und habe den ganzen Tag damit verbracht, verschiedene Pakete auszuprobieren.
Ich hatte ursprünglich matlibplot verwendet: und war nicht zufrieden mit der Zuordnung von Kategorien zu vordefinierten Farben; oder Gruppieren / Aggregieren, dann Iterieren durch die Gruppen (und immer noch Farben zuordnen müssen). Ich hatte nur das Gefühl, dass es eine schlechte Paketimplementierung war.
Seaborn würde bei meinem Fall nicht funktionieren, und Altair funktioniert NUR in einem Jupyter-Notizbuch.
Die beste Lösung für mich war PlotNine, das "eine Implementierung einer Grammatik von Grafiken in Python ist und auf ggplot2 basiert".
Unten finden Sie den Plotnine-Code zum Replizieren Ihres R-Beispiels in Python:
So sauber und einfach :)
quelle
Hier eine Kombination von Markern und Farben aus einer qualitativen Farbkarte in
matplotlib
:quelle
mpl.cm.Dark2.colors
-mpl
scheint in Ihrem Code nicht definiert zu sein undDark2
hat kein Attributcolors
.matplotlib
wiempl
ich meinen Code korrigiert , indem Sieplt
das auch enthältcm
. Zumindest in dermatplotlib
Version, die ich verwende, hat 2.0.0Dark2
Attributcolors
Mit df.plot ()
Normalerweise verwende ich beim schnellen Plotten eines DataFrame
pd.DataFrame.plot()
. Dies nimmt den Index als x-Wert, den Wert als y-Wert und zeichnet jede Spalte separat mit einer anderen Farbe. Ein DataFrame in dieser Form kann mitset_index
und erreicht werdenunstack
.Bei dieser Methode müssen Sie die Farben nicht manuell angeben.
Dieses Verfahren kann für andere Datenreihen sinnvoller sein. In meinem Fall habe ich Zeitreihendaten, daher besteht der MultiIndex aus Datum / Uhrzeit und Kategorien. Es ist auch möglich, diesen Ansatz für mehr als eine Spalte zum Färben zu verwenden, aber die Legende wird durcheinander gebracht.
quelle
Normalerweise mache ich das mit Seaborn, das auf Matplotlib aufgebaut ist
quelle