LWZ*_*LWZ 318 scatter matplotlib marker
在散点图的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)
Run Code Online (Sandbox Code Playgroud)
标记大小
s:以磅为单位的大小^ 2.它是一个标量或与x和y长度相同的数组.
什么样的单位points^2?这是什么意思?是否s=100意味10 pixel x 10 pixel?
基本上我正在尝试制作具有不同标记大小的散点图,我想弄清楚这个s数字是什么意思.
Dan*_*Dan 350
这可能是一种有点混乱的定义大小的方法,但您基本上是指定标记的区域.这意味着,要使标记的宽度(或高度)加倍,需要增加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()
Run Code Online (Sandbox Code Playgroud)
给

注意尺寸如何快速增加.相反,我们有
# 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()
Run Code Online (Sandbox Code Playgroud)
给

现在,标记的表观尺寸以直观的方式大致线性增加.
至于"点"是什么的确切含义,对于绘图目的而言,它是相当随意的,你可以通过常量来缩放所有大小,直到它们看起来合理.
希望这可以帮助!
编辑:(回应@Emma的评论)
这可能令我感到困惑.问题是关于圆的宽度加倍,所以在每个圆的第一张图片中(当我们从左向右移动时)它的宽度是前一个的两倍,因此对于该区域,这是基数为4的指数.类似地,第二个例子每个圆的面积是最后一个的两倍,它给出了基数为2的指数.
然而,这是第二个例子(我们正在缩放区域),倍增区域似乎使圆圈成为眼睛的两倍大.因此,如果我们希望圆形看起来n更大,我们会将面积增加一个因子n而不是半径,因此表观尺寸与面积成线性比例.
Imp*_*est 173
因为这里的其他答案声称s表示标记的区域,我正在添加这个答案以澄清这不一定是这种情况.
参数sin plt.scatter表示markersize**2.正如文档所说
s:标量或array_like,shape(n,),
点^ 2中的可选大小.默认值为rcParams ['lines.markersize']**2.
这可以从字面上理解.为了获得x点大的标记,您需要将该数字平方并将其赋予s参数.
因此,线图的标记大小与散点大小参数之间的关系是平方.为了产生与大小为10点的绘图标记相同大小的散点标记,您可以调用它scatter( .., s=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()
Run Code Online (Sandbox Code Playgroud)
那么为什么其他答案甚至文档都谈到s参数时的"区域" ?
当然,点**2的单位是面积单位.
marker="s"的区域确实直接是s参数的值.area = pi/4*s.然而,在所有情况下,标记的面积与s参数成比例.这是将其称为"区域"的动机,即使在大多数情况下它并不是真的.
根据与标记的面积成比例的一些量来指定散射标记的大小在很大程度上是因为它是在比较不同的贴片而不是其边长或直径时感知的标记的面积.即基础数量加倍应该使标记的面积加倍.
到目前为止,分散标记大小的答案以点为单位给出.点通常用于排版,其中字体以点指定.线宽通常也以点数指定.matplotlib中标准点的大小是每英寸72点(ppi) - 因此1点是1/72英寸.
能够以像素而不是点指定大小可能是有用的.如果图形dpi也是72,则一个点是一个像素.如果数字dpi不同(matplotlib默认为fig.dpi=100),
1 point == fig.dpi/72. pixels
Run Code Online (Sandbox Code Playgroud)
虽然散点标记的点大小因此对于不同的图形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()
Run Code Online (Sandbox Code Playgroud)
如果您对数据单元中的分散感兴趣,请查看此答案.
zha*_*ing 18
您可以使用markersize在plot方法中指定圆的大小
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()
Run Code Online (Sandbox Code Playgroud)
从这里开始
小智 15
它是标记的区域.我的意思是,如果你有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')
Run Code Online (Sandbox Code Playgroud)

当我看到这个帖子时,我有同样的疑问,所以我做了这个例子然后我在屏幕上使用了一个标尺来测量半径.
为此,我最初也尝试使用“分散”。经过相当多的浪费时间 - 我决定采用以下解决方案。
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)
Run Code Online (Sandbox Code Playgroud)
这是基于对这个问题的回答
| 归档时间: |
|
| 查看次数: |
637095 次 |
| 最近记录: |