Вы можете передать 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
with 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
).