見出し画像

Pythonでバブルチャートを描く

(1)バブルチャートを描く。

 グラフの作成に関するアーカイブです。今回はバブルチャートになります。

(2)使うデータ

 いつもどおりirisデータです。

(3)実際に描いてみる

 今回のコードはこちらです。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('iris.csv')

#x軸y軸の範囲を指定
plt.xticks(np.arange(4, 9, 1))
plt.xlim(4, 8)
plt.yticks(np.arange(1, 6, 1))
plt.ylim(1, 5)

#軸のラベルと図のタイトルを指定
plt.title('散布図')
plt.xlabel('がくの長さ')
plt.ylabel('がくの幅')

#グリッド線を描く
plt.grid(linestyle='dotted')

#バブルチャートを描く
scatter = plt.scatter(df['sepal.length'], df['sepal.width'], s=df['petal.length']*50, alpha=0.5, color='k')

#バブルの大きさの凡例を作成する
for size1 in [100, 200, 300, 400]:
   plt.scatter([], [], c='k', alpha=0.3, s=size1,
               label=str(size1/50) + 'cm')
plt.legend(labelspacing=1.2, title='petal.length')

plt.show()

 また、出来上がりの図はこちらです。

画像1

以下、解説です。

■22行目

scatter = plt.scatter(df['sepal.length'], df['sepal.width'],s=df['petal.length']*50, alpha=0.5, color='k')

 散布図を描くコードとほとんど一緒です。バブルチャートの場合は、sを指定することでの大きさを変えることができます。ここでは、petal.lengthを指定してみました。petal.lengthの値をそのまま指定した場合、が超ちいさくなるので、ここでは50倍にしました。

■25行目

for size1 in [100, 200, 300, 400]:
   plt.scatter([], [], c='k', alpha=0.3, s=size1,
               label=str(size1/50) + 'cm')
plt.legend(labelspacing=1.2, title='petal.length')

 バブルチャートの大きさの凡例を描きます。
 前述のとおり、petal.lengthを50倍して描いています。凡例を描く際は、まず同様に50倍した値でを描き、その横に本来の大きさを文字として記入します(他に良い方法があれば教えてください)。この処理を25行目のfor文で繰り返しています。
 plt.legendは凡例をつける処理です。変数のlabelspacingは行間を指定しています。titleは凡例のタイトルです。

(4)まとめ

 バブルチャートは3変数を扱うので、単純に散布図を描くよりは面倒です。ただ、いろいろな論文で見る機会が多いグラフですので、描けるようになると便利かと思います。

(5)参考

■matplotlibのlegendについてはここです。
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html