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()
また、出来上がりの図はこちらです。
以下、解説です。
■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