这可能是一种有点令人困惑的定义大小的方式,但你基本上是在指定标记的区域。这意味着,要将标记的宽度(或高度)增加一倍,您需要将s增加4倍。[因为A = WH => (2W)(2H)=4A]
然而,标记的大小是这样定义的,这是有原因的。由于面积的缩放是宽度的平方,宽度翻倍实际上会使大小增加2倍以上(实际上是4倍)。要了解这一点,请考虑以下两个示例及其产生的输出。
# doubling the width of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*4**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()
给了
注意它的大小增加得非常快。如果我们有
# doubling the area of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*2**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()
给了
现在,标记的表观大小以直观的方式大致线性地增加。
至于“点”的确切含义,对于绘图目的来说是相当随意的,你可以将所有大小按常数缩放,直到它们看起来合理为止。
编辑:(回复@Emma的评论)
我的措辞可能有点混乱。问题是圆的宽度翻倍在第一张图中每个圆的宽度都是前一张的两倍所以对于面积来说这是一个以4为底的指数。类似地,第二个例子中每个圆的面积是最后一个圆的两倍它给出了一个以2为底的指数。
然而,在第二个例子中(我们正在缩放面积),加倍的面积似乎使圆在眼睛看来是两倍大。因此,如果我们想让一个圆看起来大n倍,我们将增加一个n倍的面积,而不是增加半径,这样表面大小就与面积成线性关系。
编辑以可视化@TomaszGandor的评论:
这是不同功能的标记大小:
x = [0,2,4,6,8,10,12,14,16,18]
s_exp = [20*2**n for n in range(len(x))]
s_square = [20*n**2 for n in range(len(x))]
s_linear = [20*n for n in range(len(x))]
plt.scatter(x,[1]*len(x),s=s_exp, label='$s=2^n$', lw=1)
plt.scatter(x,[0]*len(x),s=s_square, label='$s=n^2$')
plt.scatter(x,[-1]*len(x),s=s_linear, label='$s=n$')
plt.ylim(-1.5,1.5)
plt.legend(loc='center left', bbox_to_anchor=(1.1, 0.5), labelspacing=3)
plt.show()