ここでの他の回答s
はマーカーの領域を示すと主張しているため、これは必ずしもそうではないことを明確にするために、この回答を追加します。
ポイント単位のサイズ^ 2
の引数s
はをplt.scatter
示しますmarkersize**2
。ドキュメントが言うように
s
:スカラーまたはarray_like、形状(n、)、オプションの
サイズ(ポイント単位)^ 2。デフォルトはrcParams ['lines.markersize'] ** 2です。
これは文字通り取ることができます。xポイントの大きいマーカーを取得するには、その数を2乗してs
引数に渡す必要があります。
したがって、ラインプロットのマーカーサイズと散布サイズの引数の関係は正方形です。サイズが10ポイントのプロットマーカーと同じサイズの散布マーカーを作成するには、を呼び出す必要がありますscatter( .., s=100)
。
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
「エリア」へのつながり
それでは、なぜ他の回答やドキュメントでさえ、s
パラメータに関して「面積」について語っているのでしょうか。
もちろん、ポイントの単位** 2は面積の単位です。
- 正方形のマーカーの特殊なケースで
marker="s"
は、マーカーの面積は実際にはs
パラメーターのます。
- 円の場合、円の面積は
area = pi/4*s
です。
- 他のマーカーについては、マーカーの領域との明らかな関係さえないかもしれません。
ただし、すべての場合において、マーカーの面積はs
パラメーターに比例します。これは、ほとんどの場合実際にはそうではありませんが、それを「エリア」と呼ぶ動機です。
マーカーの長さや直径ではなく、異なるパッチを比較するときに知覚されるのはマーカーの領域であるため、マーカーの領域に比例する量で散布マーカーのサイズを指定することは、これまでのところ意味があります。つまり、基になる量を2倍にすると、マーカーの面積が2倍になります。
ポイントとは?
これまでのところ、スキャッターマーカーのサイズが何を意味するかに対する答えは、ポイント単位で与えられます。ポイントは、フォントがポイントで指定されるタイポグラフィでよく使用されます。また、線幅はしばしばポイントで指定されます。matplotlibのポイントの標準サイズは1インチあたり72ポイント(ppi)です。したがって、1ポイントは1/72インチです。
ポイントではなくピクセルでサイズを指定できると便利な場合があります。図形のdpiも72の場合、1ポイントは1ピクセルです。Figureのdpiが異なる場合(matplotlibのデフォルトはfig.dpi=100
)、
1 point == fig.dpi/72. pixels
したがって、散布マーカーのポイント単位のサイズは、図のdpiごとに異なって見えますが、10 x 10ピクセル^ 2のマーカーを作成することができ、常に同じ数のピクセルがカバーされます。
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
データ単位の散布に関心がある場合は、この回答を確認してください。