Python 2.7 matplotlib中的标记和地物大小:不确定其工作原理

Python 2.7 matplotlib中的标记和地物大小:不确定其工作原理,python-2.7,matplotlib,Python 2.7,Matplotlib,我想制作一个图形,标记的大小取决于图形的大小。这样,使用方形标记大小,无论您选择什么分辨率或图形大小,所有标记都会相互接触,从而掩盖背景而不会重叠。以下是我的位置: 标记大小在pt^2中指定,其中1pt=1/72英寸,分辨率以每英寸像素为单位,图形大小以像素为单位(主子图表示的占主图形大小的比例:0.8)。因此,如果我的图的限制是lim_min和lim_max,我应该能够使用以下方法获得相应的标记大小: marker_size=((fig_size*0.8*72/Resolution)/(lim

我想制作一个图形,标记的大小取决于图形的大小。这样,使用方形标记大小,无论您选择什么分辨率或图形大小,所有标记都会相互接触,从而掩盖背景而不会重叠。以下是我的位置:

标记大小在
pt^2
中指定,其中
1pt=1/72英寸
,分辨率以每英寸像素为单位,图形大小以像素为单位(主子图表示的占主图形大小的比例:0.8)。因此,如果我的图的限制是
lim_min
lim_max
,我应该能够使用以下方法获得相应的标记大小:

marker_size=((fig_size*0.8*72/Resolution)/(lim_max-lim_min))**2
因为
(fig_size*0.8*72/分辨率)
是以点为单位的图形大小,而
(lim_max-lim_min)
是我要填充一行的标记数

这就应该做到了!。。。嗯,它不。。。完全标记非常小,如果不进行缩放,它们将不可见。我不明白为什么

我明白这不是最好的方法,你也会这样做,但我看不出有什么理由不起作用,所以我想知道我错在哪里

PS:我的主图形和子图形都是正方形

编辑:

好吧,我找到了问题的原因,而不是解决办法。
ppi
dpi
之间的混淆问题。Matplotlib在dpi中设置分辨率,该分辨率定义为特定于扫描仪或打印机的单位,具体取决于型号(?!?)


不用说,我对matplotlib中决议的实际含义极为困惑。这对我来说完全没有意义。请找个人帮忙。如何将其转换为有意义的单位?matplotlib网站似乎对此事完全沉默

如果以英寸为单位指定地物尺寸,matplotlib使用的分辨率为每英寸72点(
ppi
),则对于给定数量的标记,每个标记的宽度应为每英寸大小*每英寸点数/每英寸标记数点(目前假设子地块使用整个地物)?在我看来,
dpi
仅用于以
size\u英寸*dpi
像素的大小显示或保存图形

如果我正确理解了您的目标,下面的代码将重现所需的行为:

# Figure settings
fig_size_inch = 3
fig_ppi = 72
margin = 0.12
subplot_fraction = 1 - 2*margin

# Plot settings
lim_max = 10
lim_min = 2
n_markers = lim_max-lim_min

# Centers of each marker
xy = np.arange(lim_min+0.5, lim_max, 1)

# Size of the marker, in points^2
marker_size = (subplot_fraction * fig_size_inch * fig_ppi / n_markers)**2 

fig = pl.figure(figsize=(fig_size_inch, fig_size_inch))
fig.subplots_adjust(margin, margin, 1-margin, 1-margin, 0, 0)

# Create n_markers^2 colors
cc = pl.cm.Paired(np.linspace(0,1,n_markers*n_markers))

# Plot each marker (I could/should have left out the loops...)
for i in range(n_markers):
    for j in range(n_markers):
        ij=i+j*n_markers
        pl.scatter(xy[i], xy[j], s=marker_size, marker='s', color=cc[ij])
pl.xlim(lim_min, lim_max)
pl.ylim(lim_min, lim_max)
这与您编写的(在计算
标记大小时
)大致相同,只是省略了除以
分辨率

结果:

或者当设置
fig\u ppi
错误地设置为60时: