小编典典

pyplot 散点图标记大小

all

在散点图的 pyplot 文档中:

matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
                          vmin=None, vmax=None, alpha=None, linewidths=None,
                          faceted=True, verts=None, hold=None, **kwargs)

标记大小

s:以点^2为单位的大小。它是与 x 和 y 长度相同的标量或数组。

是什么样的单位points^2?这是什么意思?是什么s=100意思10 pixel x 10 pixel

基本上我正在尝试制作具有不同标记大小的散点图,我想弄清楚这个s数字是什么意思。


阅读 127

收藏
2022-03-11

共1个答案

小编典典

这可能是定义大小的一种有点混乱的方式,但您基本上是在指定标记的 区域 。这意味着,要将标记的宽度(或高度)加倍,您需要增加s4 倍。 [因为 A =
W H = > (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()
2022-03-11