pythonのMatplotlibで散布図やバブルチャートを描く方法

Matplotlib

pythonのMatplotlibモジュールで散布図の描き方やマーカの形状および注釈を設定する方法を知りたい,バブルチャートの見た目がカッコいいから描きたい方へ本記事ではシンプルな散布図から都市のデータを用いたバブルチャートの作成方法を解説して行きます.

 スポンサーリンク

シンプルな散布図

MatplotlibのAxes.scatter()使ってシンプルな散布図を描いてみましょう.

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
x=np.random.rand(50)
y=np.random.rand(50)
line1=ax1.scatter(x,y) #散布図を描く
plt.show()

マーカーのサイズ,色,線の太さ,透度を設定

マーカーの設定はAxes.scatter()へ引数を渡すことで可能です.

・Axes.scatter()の引数

引数効果
sマーカーサイズ
cマーカーの色
alphaマーカーの透明度
linewidthsマーカーの枠線の太さ
edgecolorsマーカーの枠線の色
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
x=np.random.rand(50)
y=np.random.rand(50)
line1=ax1.scatter(x, y,
          s=500,c="blue",alpha=0.5,  #マーカの大きさ,色,透明度
   linewidths=3,edgecolors="black")  #マーカの太さ,枠線の色
plt.show()

マーカーの形状を変える

マーカーの形状を変えるにはAxes.scatter()の引数であるmarkerから指定します.

・参考までによく使うマーカーの種類を記載します.

キーワードマーカーキーワードマーカーキーワードマーカーキーワードマーカー
“.”ポイント”,”ピクセル“o”“v”下三角
“^”上三角“<“左三角“>”右三角“s”四角
“x”小クロス“X”大クロス“D”ダイア“*”
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
x=np.random.rand(50)
y=np.random.rand(50)
line1=ax1.scatter(x, y,s=500,
          marker="*" ) #マーカの形状設定  
plt.show()

マーカーに注釈をつける

指定の座標(x,y)に注釈を表示させるにはAxes.annotate(str,xy,引数1,引数2,….)からできます.この座標値がマーカー位置と同じであればマーカーの中心に注釈が表示されます.

・annotate()の引数

引数効果
str注釈のテキスト
xy注釈を付ける座標(x,y)
size注釈の大きさ
color注釈の色
import numpy as np
import matplotlib.pyplot as plt
x=np.random.rand(50)
y=np.random.rand(50)
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
scat = ax1.scatter(x, y, s=50)
#ラベル表示
for i in range(len(x)): #配列(X)の開始から終わりまでループさせる
    ax1.annotate(i,xy=(x[i],y[i]),size=15,color="red")
plt.show()
スポンサーリンク

バブルチャート(マーカーの大きさで表す)の作成

散布図は平面上のXとYの座標値で表せています.ここに,マーカーの大きさを変えて第3の値を与えたのがバブルチャートです.
バブルチャートを作るにはAxes.scatterに引数(s)にマーカーの大きさを付加するだけです.

・下記表の都市の人口、面積、人口密度をバブルチャートで作成します.

x軸に人口、y軸に面積,引数(s)に人口密度

都市名都市略称名人口[百万人]面積[km^2]人口密度[1人/km^2]
横浜市YKH3.764388,582
大阪市OSK2.7522512,209
名古屋市NGY2.333277,131
札幌市SPR1.9811211,760
福岡市FKO1.603434,666
広島市HRS1.209071,322
import numpy as np
import matplotlib.pyplot as plt
x =np.array( [ 3.76,  2.75,  2.33,  1.98,  1.60,  1.20])  #人口
y = np.array([   438,  225,   327,   1121,  343,   907])  #面積
den = [8582,12209,7131,1760,4666,1322 ]                   #人口密度
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
scat = ax1.scatter(x, y,  s=den, alpha=0.5)#引数(s)に人口密度den
plt.show()

バブルチャート(マーカーの大きさと色で表現)の作成

先程は人口密度の大小をマーカの大きさで表しましたが,値によって色を変えるバブルチャートを作成し、より視覚的なグラフを作成していきます.


・カラーマップは値に関連付けられた色が定義されたもので,Matplotlibも多くのカラーマップを持っています,これを呼び出すにはmatplotlib.cm.get_cmap(name)を使います.
cm = plt.cm.get_cmap(‘rainbow’) #カラーマップrainbowを呼び出します.


・詳しくはMatplotlibのカラーマップリファレンス参照
https://matplotlib.org/stable/gallery/color/colormap_reference.html


・カラーバーの表示はFigure..colorbar(mappable, ax=axes)で設定します.
・colorbar(mappable, ax=axes)の引数

引数効果
mappableマップ生成に使う関数
axカラーバーを作成するaxes

 

・カラーバーの設定をAxes.scatter()の引数で行います.

Axes.scatter()の引数

引数効果
campカラーマップの使用
vmaxカラーマップの最大値
vminカラーマップの最小値
import numpy as np
import matplotlib.pyplot as plt
x =np.array( [ 3.76,  2.75,  2.33,  1.98,  1.60,  1.20])
y = np.array([   438,  225,   327,   1121,  343,   907])
den = [8582,12209,7131,1760,4666,1322 ]
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
cm = plt.cm.get_cmap('rainbow') #カラーマップ
scat = ax1.scatter(x, y, c=den,s=den,alpha=0.5,
       cmap=cm,vmin=0, vmax=13000) #カラーバーの設定
# カラーバーを付加
fig.colorbar(scat, ax=ax1)
plt.show()

人口密度の強弱がマーカーの大きさに加え色でも分かるようになりました.

 

バブルチャートをより視覚的に見やすくする

バブルチャートをより見やすくします.
1)バブルに注釈を入れて都市名がわかるようにします.
2)X軸Y軸の範囲を拡大します.
3)タイトルラベル,X軸ラベル,Y軸ラベルを追加します.
4)補助線の追加します.

import numpy as np
import matplotlib.pyplot as plt
label=np.array(["YKH","OSK","NGY","SPR","FKO","HRS"])   #都市の略称
x =np.array( [ 3.76,  2.75,  2.33,  1.98,  1.60,  1.20])
y = np.array([   438,  225,   327,   1121,  343,   907])
den = [8582,12209,7131,1760,4666,1322 ]
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
cm = plt.cm.get_cmap('rainbow') #カラーマップ
scat = ax1.scatter(x, y, c=den, vmin=0, vmax=13000, s=den, cmap=cm,alpha=0.5)
fig.colorbar(scat, ax=ax1)
for i in range(len(x)):      #配列(x)の開始から最後まで繰り返す                              
    ax1.annotate(label[i],xy=(x[i],y[i]),size=15,color="red")#マーカーに注釈表示
ax1.set_xlim(0,5)       #X軸の範囲を設定
ax1.set_ylim(0,1400)    #Y軸の範囲を設定 
ax1.set_xlabel("Population[million]")   #X軸ラベル
ax1.set_ylabel("Area[km^2]")            #Y軸ラベル
ax1.set_title("Population,Area,Population density ")#タイトル
plt.grid()    #補助線の追加
plt.show()

バブルチャートに注釈が入りどの都市か解かるようになりました.サンプルプログラムではタイトルや軸ラベルが追加され、軸範囲が拡大され視覚的に見やすくなりました.バブルチャートは私の仕事では使う事はなさそうですが,見た目がカッコ良いから本記事に掲載しました.

・よく読まれている関連記事

・python記事メニュー一覧

トップページへ戻る

 

コメント

タイトルとURLをコピーしました