gpt4 book ai didi

python - 图.transFigure.transform() : lines in figure coordinates do not scale with the figure

转载 作者:行者123 更新时间:2023-12-01 02:21:30 24 4
gpt4 key购买 nike

我正在尝试使用 Figure.transFigure.transform() 功能在图形坐标中绘制线条,但要么我不完全理解它,要么出现其他问题。根据Matplotlib Documentation , transFigure 应该是

The coordinate system of the Figure; (0,0) is bottom left of the figure, and (1,1) is top right of the figure.

但是,如果我编写一个小测试程序,应该从Figure(而不是Axes)的左下角到右上角绘制一条对角线,这只能在原始图中正确绘制线条。调整图形大小后,该线不再以右上角结束。下面是一个小测试程序来说明这种行为:

from matplotlib import pyplot as plt
from matplotlib import lines
import numpy as np

x = np.linspace(0,1,100)

X = np.array([0.0,1.0])
Y = np.array([0.0,1.0])

fig, ax = plt.subplots()

ax.plot(x, np.cos(x))
X0, Y0 = fig.transFigure.transform([X,Y])

line1 = lines.Line2D(X0, Y0, color='r', lw = 5)
fig.lines.append(line1)

plt.show()

...以及任意调整大小后的结果图:

figure that results from the above code after resizing

最佳答案

请注意,您在此处以像素坐标创建了一条静态线。它的范围始终从 (0,0) 到 (x1,y1) 像素,其中 (x1,y1) 是原始图形的右上角。

通常需要的是创建一条在图形坐标中从 (0,0) 到 (1,1) 的线。因此,人们不会手动转换点,而是让 fig.transFigure 进行转换,如下

line1 = lines.Line2D([0,1], [0,1], transform=fig.transFigure)

完整示例:

from matplotlib import pyplot as plt
from matplotlib import lines
import numpy as np

x = np.linspace(0,1,100)

X = np.array([0.0,1.0])
Y = np.array([0.0,1.0])

fig, ax = plt.subplots(figsize = (5,5), dpi = 100)

ax.plot(x, np.cos(x))

line1 = lines.Line2D(X, Y, color='r', lw = 5, transform=fig.transFigure)
fig.lines.append(line1)

plt.show()

enter image description here

这会产生与问题中相同的图,但优点是您不需要自己进行任何转换,并且可以轻松缩放或调整其大小。

关于python - 图.transFigure.transform() : lines in figure coordinates do not scale with the figure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47921361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com