因为这里的其他答案声称s表示标记的面积,我添加这个答案是为了说明情况不一定如此。
大小单位是点^2
变量s在plt中。Scatter表示标记大小**2。如文档所述
S:标量或array_like, shape (n,),可选
大小单位是点^2。默认为rcParams['行。Markersize '] ** 2。
这可以从字面上理解。为了获得一个x点大的标记,你需要平方这个数字,并把它给s参数。
线形图的标记大小和散点大小参数之间的关系是平方。为了生成与大小为10点的plot标记相同大小的散点标记,您可以将其称为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 = /4*s。
对于其他标记,甚至可能与标记的面积没有任何明显的关系。
然而,在所有情况下,标记的面积与s参数成比例。这就是称之为“区域”的动机,尽管在大多数情况下它并不是真的。
将散射标记的大小指定为与标记面积成比例的某种数量,在目前意义上,因为它是在比较不同斑块时感知到的标记面积,而不是其边长或直径。也就是说,基础数量翻倍时,标记的面积也要翻倍。
什么是积分?
到目前为止,散点标记的大小是以点为单位给出的。在排版中经常使用点,其中字体用点指定。线宽通常用点来表示。matplotlib中的点的标准大小是72点每英寸(ppi) - 1点因此是1/72英寸。
如果能够以像素而不是点来指定大小,可能会很有用。如果dpi也是72,那么一个点就是一个像素。如果图dpi不同(matplotlib默认是fig.dpi=100),
1 point == fig.dpi/72. pixels
虽然对于不同的dpi图,散点标记的点大小看起来不同,但可以生成一个10 × 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()
如果您对数据单位中的散点感兴趣,请检查这个答案。