Импорт и образец DataFrame
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns # for sample data
from matplotlib.lines import Line2D # for legend handle
# DataFrame used for all options
df = sns.load_dataset('diamonds')
carat cut color clarity depth table price x y z
0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
С matplotlib
Вы можете передать plt.scatter
аргумент c
, который позволяет вам выбрать цвета. Следующий код определяет словарь colors
для сопоставления цветов ромба с цветами печати.
fig, ax = plt.subplots(figsize=(6, 6))
colors = {'D':'tab:blue', 'E':'tab:orange', 'F':'tab:green', 'G':'tab:red', 'H':'tab:purple', 'I':'tab:brown', 'J':'tab:pink'}
ax.scatter(df['carat'], df['price'], c=df['color'].map(colors))
# add a legend
handles = [Line2D([0], [0], marker='o', color='w', markerfacecolor=v, label=k, markersize=8) for k, v in colors.items()]
ax.legend(title='color', handles=handles, bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()
df['color'].map(colors)
эффективно отображает цвета от ромба до черчения.
(Простите меня за то, что я не поместил еще один пример изображения, я думаю, что двух достаточно: P)
С seaborn
Вы можете использовать seaborn
, который является оболочкой для matplotlib
, которая по умолчанию делает его красивее (скорее, на основе мнения, я знаю: P), но также добавляет некоторые функции построения графиков.
Для этого вы можете использовать seaborn.lmplot
. с fit_reg=False
(что предотвращает автоматическое выполнение некоторой регрессии).
sns.scatterplot(x='carat', y='price', data=df, hue='color', ec=None)
тоже делает то же самое.
Выбор hue='color'
указывает seaborn на разделение и построение данных на основе уникальных значений в столбце 'color'
.
sns.lmplot(x='carat', y='price', data=df, hue='color', fit_reg=False)
![введите описание изображения здесь](https://i.stack.imgur.com/5A7Xv.png)
Если вы не хотите использовать seaborn, используйте pandas.groupby
, чтобы получить только цвета, а затем нарисуйте их, используя только matplotlib, но вам придется вручную назначать цвета по ходу работы, я добавил пример ниже:
fig, ax = plt.subplots(figsize=(6, 6))
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
) с реальным цветом (например, tab:blue
).
![введите описание изображения здесь](https://i.stack.imgur.com/5jZRN.png)
person
Ffisegydd
schedule
01.10.2014