Python Matplotlib和#x2019;s圆形标记比例及其半径?

Python Matplotlib和#x2019;s圆形标记比例及其半径?,python,matplotlib,Python,Matplotlib,圆形标记的面积如何与Matplotlib中的标记半径进行缩放?我希望它能以π乘以半径的平方来缩放,但事实并非如此 我试图创建一个图来显示N个圆的紧密分布。这种分布恰好是规则的(它是六边形的),因此很容易知道每个圆的中心位置。我使用matplotlib.pyplot.scatter(),使用matplotlib/lib/matplotlib/markers.py中的圆标记来绘制这些圆 现在为了紧密地包装这些圆,我需要设置圆形标记的区域,以便它们精确地相互接触。如果我将标记区域设置为numpy.pi

圆形标记的面积如何与Matplotlib中的标记半径进行缩放?我希望它能以π乘以半径的平方来缩放,但事实并非如此

我试图创建一个图来显示N个圆的紧密分布。这种分布恰好是规则的(它是六边形的),因此很容易知道每个圆的中心位置。我使用
matplotlib.pyplot.scatter()
,使用
matplotlib/lib/matplotlib/markers.py
中的圆标记来绘制这些圆

现在为了紧密地包装这些圆,我需要设置圆形标记的区域,以便它们精确地相互接触。如果我将标记区域设置为
numpy.pi*(L/2)**2
,其中
L
是每个圆的直径(以点为单位),这等于两个圆之间的距离(如果要精确接触)。但是这个。以下是生成此绘图的代码:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

f = plt.figure(figsize=(7, 7), dpi=100)
ax = f.add_subplot(1,1,1)
ax.set_ylim(-105,105)
ax.set_xlim(-105,105)

L = 14.0 # Diameter of a circle in data units 
# marker_radius is L/2 in points.
marker_radius = (ax.transData.transform((0,0))
                 -ax.transData.transform((L/2,0)))[0]
marker_area = np.pi*marker_radius**2
ax.scatter(x, y, color='#7fc97f', edgecolors='None', s=marker_area)

plt.savefig('figure.png',bbox_inches='tight')
很明显,
matplotlib/lib/matplotlib/markers.py
中的圆形标记的面积不会按pi乘以半径平方的比例缩放(这是应该的)。经过反复试验,我发现它实际上是半径平方的2.3倍。当我将
标记区域设置为
2.3*标记半径**2
时,我得到

我想知道是否有人可以评论为什么圆形标记的大小以这种特殊的方式缩放。还有,精确的比例是多少?真的是2.3吗?谢谢

我很快尝试了编码(仅将标记从
s
更改为
o
),由此看来,标记大小的平方根等于圆的直径(以点为单位,请参见我提到的帖子):

从文件中:

s:标量或类似数组,形状(n),可选,默认值:20个点^2大小


你能展示你的代码吗?到底什么是
L
?您是否将其用作散开的
s
参数?的
markersize
不是以数据单位表示的直径,而是以点**2表示的标记面积。感谢您的评论@thomas。我现在已经在上面的帖子中添加了我的代码
L
是绘图中每个圆的直径。我知道标记大小不是直径,而是面积。问题是为什么圆周率不是圆周率的π倍(直径/2)^2。正如我在下面的回答中所写,标记大小(在
scatter()
中的选项
s
)是直径(以点为单位)的立方,而不是圆的面积。