Ви можете передати plt.scatter
в c
аргумент , який дозволить вам вибрати кольору. У наведеному нижче коді визначено colors
словник для відображення ваших діамантових кольорів до кольорів для побудови графіків.
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])
ефективно відображає кольори від "діамантового" до "графічного".
(Вибачте мене за те, що я не ставлю ще один приклад зображення, я думаю, досить 2: P)
С seaborn
Ви можете використовувати seaborn
обгортку, matplotlib
яка за замовчуванням робить її красивішою (швидше заснована на думках, я знаю: P), але також додає деякі функції побудови графіків.
Для цього ви можете використовувати seaborn.lmplot
з fit_reg=False
(що НЕ заважає йому автоматично робити деякі регресії).
У наведеному нижче коді використовується приклад набору даних. Вибравши, hue='color'
ви кажете Seaborn розділити ваш кадр даних на основі ваших кольорів, а потім побудувати кожен з них.
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()
Без seaborn
використанняpandas.groupby
Якщо ви не хочете використовувати seaborn, ви можете використовувати, pandas.groupby
щоб отримати кольори поодинці, а потім побудувати їх за допомогою просто matplotlib, але вам доведеться вручну призначати кольори, я додав приклад нижче:
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()
Цей код передбачає той самий DataFrame, що і вище, а потім групує його на основі color
. Потім здійснюється ітерація щодо цих груп, складаючи графік для кожної з них. Для вибору кольору я створив colors
словник, який може зіставити діамантовий колір (наприклад D
) із справжнім кольором (наприклад red
).