色を選択できるように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
whichは、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
。