将matplotlib中的x轴与另一个图表的y轴共享。

12

如果我想要将两个独立坐标轴的 x 和 y 轴绑定在一起,以便它们能够同时缩放,通常我会这样做:

fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122,sharex=ax1, sharey=ax1)

但是我不知道如何将一个图的x轴与另一个图的y轴共享。例如,一个图的x轴是“时间”,我想将其与另一个图的y轴共享,该图也表示“时间”。类似于以下代码(但这并不起作用...):
ax2 = fig.add_subplot(122,sharex=ax1.yaxis, sharey=ax1.xaxis)

2
通过subplot构造函数共享不起作用,但是在创建轴之后,您始终可以使用getset。您可以尝试ax2.set_xlim(ax1.get_ylim()) - aorr
你需要这种共享仅用于子图创建,还是也包括交互式缩放、平移等操作? - ImportanceOfBeingErnest
5
这是为了交互式缩放和平移。我目前通过连接到 "ylim_changed" 回调函数来解决这个问题:ax.callbacks.connect('ylim_changed', on_ylims_changed),然后以这种方式更新内容,但似乎可能有更简单的方法来实现这一点。 - s_haskey
2个回答

0

我会做这样的事情,

fig, axs = plt.subplots(3, sharex=True, sharey=True) //Here
fig.suptitle('Sharing both axes')
axs[0].plot(x, y ** 2)
axs[1].plot(x, 0.3 * y, 'o')
axs[2].plot(x, y, '+')

根据 matplotlib 的文档,对我来说也很有效

另一种方法是你也可以叠加在一起。


0
你可以在所有绘图完成后手动设置坐标轴属性。
def sharexy(ax1, ax2):
    ax2.set_ylim(*ax1.get_xlim())
    ax2.set_yticks(ax1.get_xticks())

data = [i**2 for i in range(10)]

fig, ax = plt.subplots(ncols=2, figsize=(6, 2))

ax[1].plot(data)
ax[1].set_xticks([0.0, 2.5, 5, 7.5, 10.0])

sharexy(ax[1], ax[0])

任何需要在轴之间共享的其他内容都可以使用`.get_`方法查找并使用`.set_`方法进行设置。这些内容将放在`sharexy`函数中,并应在绘图生成结束时调用。
上述内容生成的是:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接