【发布时间】:2017-06-08 15:57:37
【问题描述】:
我正在准备一个带有从一个到另一个的子图和箭头的图形,在这里解决:Drawing lines between two plots in Matplotlib
在我的图中,子图都具有相同的纵横比,这似乎扰乱了从数据坐标到图形坐标的转换,所以我创建的 Line2D 对象不会去我想要的地方。
这是一个简单的例子(从上面的链接修改),它演示了这个问题,甚至不需要子图:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(6,4))
ax = fig.add_subplot(111)
ax.set_aspect('equal')
x = [0.2, 0.9]
y = [0.3, 0.7]
ax.plot(x,y,'k--', lw=4)
transFigure = fig.transFigure.inverted()
coord1 = transFigure.transform(ax.transData.transform([x[0],y[0]]))
coord2 = transFigure.transform(ax.transData.transform([x[1],y[1]]))
line = matplotlib.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]),
transform=fig.transFigure)
fig.lines.append(line)
plt.show()
通过改变图形的尺寸,很容易看到 Line2D 对象改变了斜率,而轴上的图保持了它的斜率(对于相等的纵横比)。
是否有一种直接的方法来获取这些图形坐标(或使用不同的变换),以使 Line2D 对象与绘制的线保持一致?
【问题讨论】:
-
你能说出为什么你不按照 cmets 对链接问题的建议使用
ConnectorPatch吗? -
我实际上是在使用 PathPatch 绘制一些曲线(将许多曲线从一个绘图折叠到另一个绘图),然后还在这些曲线的末端添加 FancyArrows。看起来 ConnectorPatch 会接近我想要的,但我想将曲线指定为贝塞尔曲线以收敛并在一侧以相同的斜率结束。
标签: python matplotlib