marker sizeの変更方法と調整の仕方【matplotlib】

matplotlib

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()
size変更後のscatter

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

sがdefaultの時

折れ線グラフ(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変更後のplot

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

marker sizeがdefaultのplot

marker sizeの決め方

scatterのs引数とplotのmarkersize引数は表している値が違うようなので、使用する方をご覧ください。

散布図(scatter)

scatterにおけるs引数の値は何を表しているのでしょうか?

実はmarkerの面積を表しています。

しかし人間は面積の大きさで指定するよりは長さによって大きさを決定する方が多いでしょう。
そこで長さスケールで調整する方法を考えてみます。

面積(A)は高さ(H)*幅(W)で計算されます(定数倍は省きます…)

さらに高さ(H)=幅(W)=Rとすると
幅を2倍にするなら

\(2R*2R=4R^2=4A\)

となって、面積つまり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倍ずつされていますね!

参考:

pyplot scatter plot marker size
In the pyplot document for scatter plot: matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vm...

折れ線グラフ(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倍されていることがわかりますね

コメント

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