pyplot散点图标记大小

在用于散点图的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增加4倍。[因为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() 

在这里输入图像描述

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

至于“点”的确切含义,对于绘图而言是相当随心所欲的,你可以把所有的尺寸缩小一个常数,直到看起来合理。

希望这可以帮助!

编辑:(回复@伊玛的评论)

这可能是我的混淆措辞。 这个问题是关于一个圆的宽度加倍的,所以在第一张图片中,每个圆圈(从左到右)的宽度是前一个的两倍,所以对于这个区域来说,这是一个基数为4的指数。类似的,第二个例子每个圆都有最后一个面积的两倍,以2为底的指数。

然而,这是第二个例子(我们正在缩放区域)中,加倍区域似乎使圆圈成为眼睛的两倍。 因此,如果我们想要一个圆出现一个更大的因子n我们会增加一个因子n而不是半径的面积,所以表观大小与该面积线性地成比例。

这是标记的区域 。 我的意思是你有s1 = 1000 ,然后s2 = 4000 ,每个圆的半径之间的关系是: r_s2 = 2 * r_s1 。 看下面的图:

 plt.scatter(2, 1, s=4000, c='r') plt.scatter(2, 1, s=1000 ,c='b') plt.scatter(2, 1, s=10, c='g') 

在这里输入图像描述

当我看到post的时候,我也有同样的疑问,所以我做了这个例子,然后我在屏幕上用尺子来测量半径。

您可以使用标记大小来指定绘图方法中的圆的大小

 import numpy as np import matplotlib.pyplot as plt x1 = np.random.randn(20) x2 = np.random.randn(20) plt.figure(1) # you can specify the marker size two ways directly: plt.plot(x1, 'bo', markersize=20) # blue circle with size 10 plt.plot(x2, 'ro', ms=10,) # ms is just an alias for markersize plt.show() 

从这里

在这里输入图像描述

如果圆的大小对应于s=parameter的平方,则为每个添加到大小数组的元素指定一个平方根,如下所示: s=[1, 1.414, 1.73, 2.0, 2.24]等当它取这些值并返回它们时,它们的相对大小增加将是平方进展的平方根,其返回线性进程。

如果我将它们输出到plot, output=[1, 2, 3, 4, 5] 。 试试列表解释: s=[numpy.sqrt(i) for i in s]

我也试图最初使用“分散”来达到这个目的。 在浪费了相当多的时间之后,我决定采取以下解决scheme。

 import matplotlib.pyplot as plt input_list = [{'x':100,'y':200,'radius':50, 'color':(0.1,0.2,0.3)}] output_list = [] for point in input_list: output_list.append(plt.Circle((point['x'], point['y']), point['radius'], color=point['color'], fill=False)) ax = plt.gca(aspect='equal') ax.cla() ax.set_xlim((0, 1000)) ax.set_ylim((0, 1000)) for circle in output_list: ax.add_artist(circle) 

在这里输入图像描述

这是基于对这个问题的回答