【Python】Y軸を固定し、グラフ位置も指定して散布図を作成する方法
【Python】Y軸を固定し、グラフ位置も指定して散布図を作成する方法
はじめに
Pythonでは散布図を描画する際に、seabornのpairplot関数などを使用して一気に描画することができます。
以下は、seabornのpairplot関数を使用して一気に散布図を描画する例です。
import seaborn as sns
sns.set(style="ticks")
# irisデータセットを読み込み
iris = sns.load_dataset("iris")
# pairplot関数で散布図を作成
sns.pairplot(iris, hue="species")
このコードでは、irisデータセットを読み込んで、hueオプションで花の種類ごとに色分けされた散布図を作成しています。
しかし、今回はY軸に使用する変数を固定し、レイアウトも指定して散布図を一気に作成したいと思います。
データの列が多い時には必要なY軸の値のみの散布図を取り出したいですもんね。
Y軸を固定
Y軸を固定するためにはpairplot関数のx_varsとy_varsにカラム名を指定してあげます。
ここではみなさん自由に設定してみてください。
x_name_list=iris.columns
y_name='petal_width'
# pairplot関数で散布図を作成
sns.pairplot(iris,
x_vars = x_name_list, # x軸のカラム
y_vars = y_name, # y軸のカラム
hue="species")
散布図のレイアウトを指定
まず散布図のレイアウト変更ではsearbonを使わずに作りました。
他にも試したところ、これが一番上手くいったので紹介します。
x_name_list=iris.columns
y_name='petal_width'
import math
#レイアウト指定
#2×3で表示
nrows=2
ncol=3
# 1つのグラフのサイズを設定する
fig, axes = plt.subplots(nrows=nrows, ncols=ncol, figsize=(20, 10))
# 列の名前を設定する
cols = list(iris.columns)
# グラフを作成する
for i in range(nrows):
for j in range(ncol):
# グラフがすべて表示された場合には、ループを終了する
if (i*ncol+j) >= len(cols):
break
# 散布図を描画する
axes[i][j].scatter(iris[cols[i*ncol+j]], iris[y_name], label=cols[i*ncol+j])
# 軸ラベルを設定する
axes[i][j].set_xlabel(cols[i*ncol+j])
axes[i][j].set_ylabel(y_name)
# 凡例を表示する
axes[i][j].legend()
# グラフを表示する
plt.show()
これを実行すればY軸の値は固定したまま、レイアウトの変更も可能になります。
散布図以外にもヒストグラムや箱ひげ図でも適応可能なので便利です。
こちらが実行結果になります。
図のレイアウトが変更されています。
ちゃんと2×3で図が表示されていますね。
[おまけ]近似線の表示
基本的にはこれで良いですが、味気ないので近似線もseabornを使って表示させましょう。
x_name_list=iris.columns
y_name='petal_width'
import math
#レイアウト指定
#3×2で表示
nrows=2
ncol=3
# 1つのグラフのサイズを設定する
fig, axes = plt.subplots(nrows=nrows, ncols=ncol, figsize=(20, 10))
# 列の名前を設定する
cols = list(iris.columns)
# グラフを作成する
for i in range(nrows):
for j in range(ncol):
# グラフがすべて表示された場合には、ループを終了する
if (i*ncol+j) >= len(cols):
break
# 散布図を描画する
#axes[i][j].scatter(iris[cols[i*ncol+j]], iris[y_name], label=cols[i*ncol+j])
# 散布図を描画する(seabornを使う&近似線表示)
sns.regplot(data=iris, x=cols[i*ncol+j], y=y_name, ax=axes[i][j], label=cols[i*ncol+j])
# 軸ラベルを設定する
axes[i][j].set_xlabel(cols[i*ncol+j])
axes[i][j].set_ylabel(y_name)
# 凡例を表示する
axes[i][j].legend()
# グラフを表示する
plt.show()
sna.regplot()という関数を用いることで以下のように近似線が表示されるようになります。
これだけで近似線が表示されるなんて便利ですね。
実行してみましょう。
近似線が表示されていることが分かると思います。
これで少し華やかに見えますね。
おわりに
今回はただpairplotで散布図を描画するのではなく、Y軸も固定し、レイアウトも変更する方法を学びました。
データの列が多すぎるときにはすべての組み合わせの散布図を作成すると大変なのでY軸を固定してあげるとよいでしょう。
次回は散布図だけでなく相関係数も一気に表示し、かつ可視化させる方法を記事化したいと思います。