我希望能够在Matplotlib中的两个子图之间画一条线。目前,我使用此SO主题中提供的方法:Drawing lines between two plots in Matplotlib因此使用transFigure和matplotlib.lines.Line2D
然而,当我放大我的图形时(两个子图共享相同的x和y轴),该线不会更新,即它在图框中保持相同的坐标,但不在我的轴框架中。
是否存在一种处理此问题的简单方法?
答案 0 :(得分:3)
正如链接问题(Drawing lines between two plots in Matplotlib)中的评论所示,您应该使用ConnectionPatch
来连接图表。关于这个ConnectionPatch
的好处不仅在于它很容易实现,而且它还可以与数据一起移动和缩放。
以下是如何使用它的示例。
import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch
import numpy as np
fig, (ax1, ax2) = plt.subplots(1,2, sharex=True, sharey=True)
x,y = np.arange(23), np.random.randint(0,10, size=23)
x=np.sort(x)
i = 10
ax1.plot(x,y, marker="s", linestyle="-.", c="r")
ax2.plot(x,y, marker="o", linestyle="", c="b")
con = ConnectionPatch(xyA=(x[i],y[i]), xyB=(x[i],y[i]),
coordsA="data", coordsB="data",
axesA=ax2, axesB=ax1, arrowstyle="-")
ax2.add_artist(con)
plt.show()