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] |
横浜市 | YKH | 3.76 | 438 | 8,582 |
大阪市 | OSK | 2.75 | 225 | 12,209 |
名古屋市 | NGY | 2.33 | 327 | 7,131 |
札幌市 | SPR | 1.98 | 1121 | 1,760 |
福岡市 | FKO | 1.60 | 343 | 4,666 |
広島市 | HRS | 1.20 | 907 | 1,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記事メニュー一覧
コメント