在使用Matplotlib处理缩放时绘制两个子图之间的线

时间:2016-11-22 16:31:34

标签: python matplotlib

我希望能够在Matplotlib中的两个子图之间画一条线。目前,我使用此SO主题中提供的方法:Drawing lines between two plots in Matplotlib因此使用transFigure和matplotlib.lines.Line2D

然而,当我放大我的图形时(两个子图共享相同的x和y轴),该线不会更新,即它在图框中保持相同的坐标,但不在我的轴框架中。

是否存在一种处理此问题的简单方法?

1 个答案:

答案 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()