Możesz przejść plt.scatter
do c
argumentu, który pozwoli Ci wybrać kolory. Poniższy kod definiuje colors
słownik do mapowania kolorów diamentów na kolory kreślenia.
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])
efektywnie odwzorowuje kolory od „diamentu” do „kreślenia”.
(Wybaczcie, że nie umieszczam kolejnego przykładowego obrazu, myślę, że 2 wystarczy: P)
Z seaborn
Możesz użyć, seaborn
która jest otoką, matplotlib
która sprawia, że domyślnie wygląda ładniej (raczej oparta na opiniach, wiem: P), ale także dodaje kilka funkcji kreślących.
Do tego możesz użyć seaborn.lmplot
with fit_reg=False
(co zapobiega automatycznemu wykonywaniu regresji).
Poniższy kod wykorzystuje przykładowy zestaw danych. Wybierając hue='color'
, każesz seabornowi podzielić ramkę danych na podstawie twoich kolorów, a następnie wykreślić każdy z nich.
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()
Bez seaborn
użyciapandas.groupby
Jeśli nie chcesz używać poroża morskiego, możesz użyć, pandas.groupby
aby uzyskać same kolory, a następnie wykreślić je za pomocą tylko matplotlib, ale będziesz musiał ręcznie przypisywać kolory w trakcie, dodałem przykład poniżej:
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()
Ten kod zakłada tę samą ramkę DataFrame, co powyżej, a następnie grupuje ją na podstawie color
. Następnie dokonuje iteracji po tych grupach, wykreślając dla każdej z nich. Aby wybrać kolor, stworzyłem colors
słownik, który może odwzorować kolor diamentu (na przykład D
) na rzeczywisty kolor (na przykład red
).