インポートとサンプル 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)
色を「ダイヤモンド」から「プロット」に効果的にマッピングします。
(別のサンプル画像を掲載していないことを許してください。2つで十分だと思います:P)
とseaborn
これは、デフォルトで見栄えを良くするseaborn
ラッパーであり(むしろ意見に基づいています、私は知っています:P)、いくつかのプロット関数を追加することもできます。matplotlib
seaborn.lmplot
これには、 with を使用できます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)

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
。
