用双轴在两点之间画线

时间:2020-02-03 13:34:07

标签: python matplotlib

我已遵循此示例(Drawing lines between two plots in Matplotlib),但遇到了问题。我认为这与以下事实有关:我本质上有两个不同的y点,但不确定如何修改代码以对其进行修复。我希望这条线从它下面的一个点开始,到另一点结束,并绘制所有线条。

fig=plt.figure(figsize=(22,10), dpi=150)
ax1 = fig.add_subplot(1, 1, 1)
ax2 = ax1.twinx()
n = 10
y1 = np.random.random(n)
y2 = np.random.random(n) + 1
x1 = np.arange(n)
ax1.scatter(x1, y1)
ax2.scatter(x1, y2)

i = 1
xy = (x1[i],y1[i])
con = ConnectionPatch(xyA=xy, xyB=xy, coordsA="data", coordsB="data",
                  axesA=ax1, axesB=ax2, color="red")
ax2.add_artist(con)

ax1.plot(x1[i],y1[i],'g+',markersize=12)
ax2.plot(x1[i],y1[i],'g+',markersize=12)

Failed attempt

1 个答案:

答案 0 :(得分:1)

只需遍历压缩的(x,y1,y2):

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch

fig = plt.figure(figsize=(10, 5), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ax2 = ax1.twinx()
n = 10
y1 = np.random.random(n)
y2 = np.random.random(n) + 1
x1 = np.arange(n)

# I add some colors blue for left y-axis, red for right y-axis
ax1.scatter(x1, y1, c='b')  
ax2.scatter(x1, y2, c='r')

# Now iterate over paired x, and 2 y values:
for xi, y1i, y2i in zip(x1, y1, y2):
    con = ConnectionPatch(
        xyA=(xi, y1i),
        xyB=(xi, y2i),
        coordsA="data",
        coordsB="data",
        axesA=ax1,
        axesB=ax2,
        color='g',
    )
    ax1.add_artist(con)
plt.show()

出: img