Você pode passar plt.scatter
um c
argumento que lhe permitirá selecionar as cores. O código a seguir define um colors
dicionário para mapear as cores do diamante para as cores de plotagem.
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])
mapeia efetivamente as cores de "diamante" para "plotagem".
(Perdoe-me por não colocar outra imagem de exemplo, acho que 2 é o suficiente: P)
Com seaborn
Você pode usar o seaborn
que é um invólucro matplotlib
que o torna mais bonito por padrão (em vez de baseado em opinião, eu sei: P), mas também adiciona algumas funções de plotagem.
Para isso, você pode usar seaborn.lmplot
com fit_reg=False
(o que o impede de fazer alguma regressão automaticamente).
O código a seguir usa um conjunto de dados de exemplo. Ao selecionar, hue='color'
você diz ao seaborn para dividir seu dataframe com base em suas cores e, em seguida, plotar cada uma.
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()
Sem seaborn
usarpandas.groupby
Se você não quiser usar seaborn, você pode usar pandas.groupby
para obter as cores sozinhas e, em seguida, plotá-las usando apenas matplotlib, mas você terá que atribuir cores manualmente à medida que avança. Eu adicionei um exemplo abaixo:
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 assume o mesmo DataFrame acima e, a seguir, o agrupa com base em color
. Em seguida, itera sobre esses grupos, traçando para cada um. Para selecionar uma cor, criei um colors
dicionário que pode mapear a cor do diamante (por exemplo D
) para uma cor real (por exemplo red
).