轴的绝对定位

安德烈亚斯·马蒂亚斯

在 matplotlib 中,我尝试定位图形的轴,使轴矩形的左下角位于 (100, 100),右上角位于 (400, 400),假设给定坐标的单位是点 (pt )。

import matplotlib.pyplot as plt
plt.rcParams['ps.papersize'] = 'a4'

fig = plt.figure(figsize=(8.27, 11.69))
ax = fig.add_subplot(1,1,1)
ax.plot([1,3,2])

mybbox = ax.get_position()
mybbox.x0, mybbox.y0 = fig.transFigure.inverted().transform((100, 100))
mybbox.x1, mybbox.y1 = fig.transFigure.inverted().transform((400, 400))
ax.set_position(mybbox)

print(fig.transFigure.transform(ax.get_position()))

plt.savefig('foo.ps')

但是创建的 postscript 文件产生轴的角实际上在 (72,72) 和 (288,288):

72 72 m
288 72 l
288 288 l
72 288 l
cl

因此,所有坐标都以 0.72 的常数因子偏离目标。通过应用transFigure转换来计算轴的绝对位置,我做错了什么吗?

存在的重要性欧内斯特

1 个像素是 0.72 点。fig.transFigure.inverted()从使用像素而不是点的显示空间转换而来。准确地说,您还需要考虑数字 dpi(默认情况下为 dpi=100)。所以使用

ppd = 72./fig.dpi  # points per dot
mybbox = ax.get_position()
mybbox.x0, mybbox.y0 = fig.transFigure.inverted().transform((100/ppd, 100/ppd))
mybbox.x1, mybbox.y1 = fig.transFigure.inverted().transform((400/ppd, 400/ppd))
ax.set_position(mybbox)

应该导致

gsave
100 100 m
400 100 l
400 400 l
100 400 l
cl

在后脚本文件中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章