在Matplotlib中的两个绘图之间绘制线条

我正在用Matplotlib绘制两个子图,基本如下:

subplot(211); imshow(a); scatter(..., ...) subplot(212); imshow(b); scatter(..., ...) 

我可以在这两个子图之间画线吗? 我该怎么做?

其他答案的解决scheme在很多情况下都不是最理想的(因为只有在计算完点后,没有对图进行更改)。

更好的解决scheme将使用特别devise的ConnectionPatch

 import matplotlib.pyplot as plt from matplotlib.patches import ConnectionPatch import numpy as np fig = plt.figure(figsize=(10,5)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) x,y = np.random.rand(100),np.random.rand(100) ax1.plot(x,y,'ko') ax2.plot(x,y,'ko') i = 10 xy = (x[i],y[i]) con = ConnectionPatch(xyA=xy, xyB=xy, coordsA="data", coordsB="data", axesA=ax2, axesB=ax1, color="red") ax2.add_artist(con) ax1.plot(x[i],y[i],'ro',markersize=10) ax2.plot(x[i],y[i],'ro',markersize=10) plt.show() 

在这里输入图像描述

你可以用fig.line 。 它添加了任何线条到你的身材。 图线比轴线高,因此您不需要任何轴来绘制它。

这个例子标记了两个轴上的相同点。 有必要小心坐标系,但是这个转换对你来说是很辛苦的工作。

 import matplotlib.pyplot as plt import matplotlib import numpy as np fig = plt.figure(figsize=(10,5)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) x,y = np.random.rand(100),np.random.rand(100) ax1.plot(x,y,'ko') ax2.plot(x,y,'ko') i = 10 transFigure = fig.transFigure.inverted() coord1 = transFigure.transform(ax1.transData.transform([x[i],y[i]])) coord2 = transFigure.transform(ax2.transData.transform([x[i],y[i]])) line = matplotlib.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]), transform=fig.transFigure) fig.lines = line, ax1.plot(x[i],y[i],'ro',markersize=20) ax2.plot(x[i],y[i],'ro',markersize=20) plt.show() 

在这里输入图像描述

我不确定这是不是你正在寻找的东西,而是一个简单的诡计,在子图上绘制。

 import matplotlib.pyplot as plt import numpy as np ax1=plt.figure(1).add_subplot(211) ax2=plt.figure(1).add_subplot(212) x_data=np.linspace(0,10,20) ax1.plot(x_data, x_data**2,'o') ax2.plot(x_data, x_data**3, 'o') ax3 = plt.figure(1).add_subplot(111) ax3.plot([5,5],[0,1],'--') ax3.set_xlim([0,10]) ax3.axis("off") plt.show()