gpt4 book ai didi

python - pyplot散点图标记大小

转载 作者:行者123 更新时间:2023-12-03 04:00:09 26 4
gpt4 key购买 nike

在散点图的 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:size in points^2. It is a scalar or an array of the same length as x and y.

点^2是什么单位?这是什么意思? s=100 是否意味着 10 像素 x 10 像素

基本上,我正在尝试使用不同的标记大小绘制散点图,并且我想弄清楚 s 数字的含义。

最佳答案

这可能是一种有点令人困惑的定义大小的方式,但您基本上是在指定标记的区域。这意味着,要将标记的宽度(或高度)加倍,您需要将 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()

给出

enter image description here

请注意大小如何快速增加。如果我们有

# 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()

给出

enter image description here

现在,标记的外观尺寸以直观的方式大致线性增加。

至于“点”的确切含义,出于绘图目的,它是相当任意的,您可以将所有尺寸缩放一个常数,直到它们看起来合理为止。

编辑:(回应@Emma的评论)

我的措辞可能令人困惑。问题询问的是如何将圆的宽度加倍,因此在第一张图片中,每个圆(当我们从左向右移动时)它的宽度是前一个圆的宽度的两倍,因此对于面积来说,这是一个以 4 为底的指数。类似地,第二个示例每个圆的面积都是最后一个圆的两倍,给出了以 2 为底的指数。

然而,在第二个示例(我们正在缩放区域)中,面积加倍似乎使圆在眼睛看来变成了两倍大。因此,如果我们希望一个圆看起来大 n 倍,我们会将面积增加 n 倍,而不是半径,这样表观尺寸就会与面积成线性比例。

编辑以可视化 @TomaszGandor 的评论:

这就是标记尺寸的不同功能的样子:

Exponential, Square, or Linear size

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()

关于python - pyplot散点图标记大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14827650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com