Puede pasar plt.scatter
un c
argumento que le permitirá seleccionar los colores. El siguiente código define un colors
diccionario para asignar los colores de su diamante a los colores de trazado.
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])
mapea eficazmente los colores de "diamante" a "trazado".
(Perdóname por no poner otra imagen de ejemplo, creo que 2 es suficiente: P)
Con seaborn
Puede usar seaborn
cuál es un envoltorio matplotlib
que lo hace lucir más bonito por defecto (más bien basado en opiniones, lo sé: P) pero también agrega algunas funciones de trazado.
Para esto, puede usar seaborn.lmplot
con fit_reg=False
(lo que evita que automáticamente haga alguna regresión).
El siguiente código utiliza un conjunto de datos de ejemplo. Al seleccionar, hue='color'
le dice a seaborn que divida su marco de datos en función de sus colores y luego trace cada uno.
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()
Sin seaborn
usarpandas.groupby
Si no desea usar seaborn, puede usar pandas.groupby
para obtener los colores solo y luego trazarlos usando solo matplotlib, pero tendrá que asignar colores manualmente a medida que avanza, agregué un ejemplo a continuación:
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()
Este código asume el mismo DataFrame que el anterior y luego lo agrupa en función de color
. Luego itera sobre estos grupos, trazando para cada uno. Para seleccionar un color, he creado un colors
diccionario que puede asignar el color del diamante (por ejemplo D
) a un color real (por ejemplo red
).