Puoi passare plt.scatter
un c
argomento che ti permetterà di selezionare i colori. Il seguente codice definisce un colors
dizionario per mappare i colori di diamanti ai colori stampa.
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])
mappa efficacemente i colori dal "diamante" al "disegno".
(Perdonami per non aver inserito un'altra immagine di esempio, penso che 2 sia sufficiente: P)
Con seaborn
Puoi usare seaborn
che è un wrapper matplotlib
che lo rende più carino per impostazione predefinita (piuttosto basato sull'opinione, lo so: P) ma aggiunge anche alcune funzioni di plottaggio.
Per questo potresti usare seaborn.lmplot
con fit_reg=False
(che gli impedisce di fare automaticamente qualche regressione).
Il codice seguente utilizza un set di dati di esempio. Selezionando hue='color'
si dice a seaborn di suddividere il dataframe in base ai colori e quindi di tracciare ciascuno di essi.
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()
Senza seaborn
usarepandas.groupby
Se non vuoi usare seaborn, puoi usare pandas.groupby
per ottenere i colori da soli e poi stamparli usando solo matplotlib, ma dovrai assegnare manualmente i colori mentre procedi, ho aggiunto un esempio di seguito:
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()
Questo codice presuppone lo stesso DataFrame di sopra e quindi lo raggruppa in base a color
. Quindi itera su questi gruppi, tracciando per ciascuno di essi. Per selezionare un colore ho creato un colors
dizionario che può mappare il colore del diamante (ad esempio D
) a un colore reale (ad esempio red
).