我正在尝试使用Figure.transFigure.transform()
功能在图形坐标中绘制线条,但要么我不完全理解它,要么出现其他问题。根据{{3}},transFigure
应为
图的坐标系; (0,0)位于左下方 图中,(1,1)位于图的右上角。
但是,如果我编写一个小测试程序,应该从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()
...以及任意调整后的结果数字:
答案 0 :(得分:2)
请注意,您在此处以像素坐标创建静态线。它的范围始终为(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()
这会产生与问题中相同的情节,但其优点是您不需要自己进行任何变换,并且您可以轻松地缩放或调整它。