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时: