Sie können plt.scatterein cArgument übergeben, mit dem Sie die Farben auswählen können. Der folgende Code definiert ein colorsWörterbuch, um Ihre Diamantfarben den Plotfarben zuzuordnen.
import matplotlib.pyplot as plt
import pandas as pd
carat = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
price = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
color =['D', 'D', 'D', 'E', 'E', 'E', 'F', 'F', 'F', 'G', 'G', 'G',]
df = pd.DataFrame(dict(carat=carat, price=price, color=color))
fig, ax = plt.subplots()
colors = {'D':'red', 'E':'blue', 'F':'green', 'G':'black'}
ax.scatter(df['carat'], df['price'], c=df['color'].apply(lambda x: colors[x]))
plt.show()
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 seaborneinen Wrapper verwenden matplotlib, 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.lmplotmit verwenden fit_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.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
carat = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
price = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
color =['D', 'D', 'D', 'E', 'E', 'E', 'F', 'F', 'F', 'G', 'G', 'G',]
df = pd.DataFrame(dict(carat=carat, price=price, color=color))
sns.lmplot('carat', 'price', data=df, hue='color', fit_reg=False)
plt.show()

Ohne zu seabornbenutzenpandas.groupby
Wenn Sie Seaborn nicht verwenden möchten, können Sie pandas.groupbydie 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:
fig, ax = plt.subplots()
colors = {'D':'red', 'E':'blue', 'F':'green', 'G':'black'}
grouped = df.groupby('color')
for key, group in grouped:
group.plot(ax=ax, kind='scatter', x='carat', y='price', label=key, color=colors[key])
plt.show()
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 ein colorsWörterbuch erstellt, das die Diamantfarbe (zum Beispiel D) einer echten Farbe (zum Beispiel red) zuordnen kann .
