在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')


但是创建的后记文件会得出轴的角实际上是
在(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


在后脚本文件中。

关于python - 轴的绝对定位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51866690/

10-12 18:21