marker sizeを変更する
散布図(scatter)
markerは散布図(scatter)や折れ線グラフのデータ点に使われますが、そのmarkerの大きさはどうやって変更するのでしょうか?
実は散布図の点の大きさはscatter()におけるs
引数を用いることで変更することができます。
(plotではmarkersize
を使います)
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, s=200)
plt.show()

ちなみにsがデフォルトのscatterはこんな感じ

折れ線グラフ(plot)
折れ線グラフ(plot)でもデータ点にmarkerを使うことができますが、散布図(scatter)の時とは違い、plot()におけるmarkersize
引数を用います。
デフォルトではmarkerは設定されていないので、marker
引数でmarkerの形を設定するのを忘れないようにしてください。
実際にコードを見てみましょう。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [5, 4, 7, 1, 0]
plt.plot(x, y, marker='o', markersize=20)
plt.show()

デフォルトはこれくらいの大きさです。

marker sizeの決め方
scatterのs
引数とplotのmarkersize
引数は表している値が違うようなので、使用する方をご覧ください。
散布図(scatter)
scatterにおけるs
引数の値は何を表しているのでしょうか?
実はmarkerの面積を表しています。
しかし人間は面積の大きさで指定するよりは長さによって大きさを決定する方が多いでしょう。
そこで長さスケールで調整する方法を考えてみます。
面積(A)は高さ(H)*幅(W)で計算されます(定数倍は省きます…)
さらに高さ(H)=幅(W)=Rとすると
幅を2倍にするなら
となって、面積つまりs
引数を4倍すれば良いことになります。
本当にs
引数を4倍することで幅を2倍することができるのかコードで確認してみましょう。
import matplotlib.pyplot as plt
x = [4,16,64,256,1024]
for i, s in enumerate(x):
plt.scatter(i*20,0,s=s)
plt.show()

確かに幅が2倍ずつされていますね!
参考:

折れ線グラフ(plot)
折れ線グラフでmarkerの大きさを調整するmarkersize
引数ではどうやって調整すれば良いのでしょうか?
markerksize引数はmarkerの幅と連動していて、markersize引数の値を2倍にすると幅も2倍されます。(間違えていたら教えてください)
markersizeが16の時と64の時で比べてみましょう。
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 3, 4, 5]
y = np.asarray([5, 4, 7, 1, 0])
plt.plot(x, y, marker='o',markersize=16)
plt.plot(x, y-2, marker='o', markersize=64)
plt.show()

確かに幅が64/16=4で4倍されていることがわかりますね
コメント