因为这里的其他答案声称fig.dpi=100表示标记的区域,我正在添加这个答案以澄清这不一定是这种情况。
分数大小^ 2
参数fig.dpi=100在s中表示markersize**2.正如文档所述
fig.dpi=100:标量或array_like,shape(n,),可选
大小以点^ 2。 默认值为rcParams ['lines.markersize'] ** 2。
这可以从字面上理解。 为了获得x点大的标记,您需要将该数字平方并将其赋予fig.dpi=100参数。
因此,线图的标记大小与散点大小参数之间的关系是平方。 为了生成与大小为10点的绘图标记大小相同的散点标记,您将调用fig.dpi=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()
连接到“区域”
那么为什么其他答案甚至文档都谈到了fig.dpi=100参数的“区域”?
当然,点** 2的单位是面积单位。
对于方形标记的特殊情况fig.dpi=100,标记的区域确实直接是s参数的值。
对于圆形,圆的面积为fig.dpi=100。
对于其他标记,甚至可能与标记的区域没有任何明显的关系。
但是,在所有情况下,标记的面积与fig.dpi=100参数成比例。 这是将其称为“区域”的动机,即使在大多数情况下它并不是真的。
根据与标记的面积成比例的一些量来指定散射标记的大小在很大程度上是因为它是在比较不同的贴片而不是其边长或直径时感知的标记的面积。即 将基础数量加倍应该使标记的面积加倍。
什么是积分?
到目前为止,分散标记大小的答案以点为单位给出。 点通常用于排版,其中字体以点指定。 线宽通常也以点数指定。 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()