如何在子图共享x轴时停止xlim更新

时间:2018-04-23 09:29:35

标签: python matplotlib

如果我有

import matplotlib.pyplot as plt

plt.plot([0,1], [0,1])
plt.plot([0,2], [0,1], scalex=False)

绘制第二行不会更新轴xlim: enter image description here

但是,如果我使用共享的x轴创建子图,scalex kwarg似乎没有效果:

fig, ax_arr = plt.subplots(2, 1, sharex=True)
for ax in ax_arr.flat:
    ax.plot([0,1], [0,1])
    ax.plot([0,2], [0,1], scalex=False)

enter image description here

在这个例子中是否有另一个kwarg或设置用于停止影响轴xlim的绘制线?

2 个答案:

答案 0 :(得分:2)

scalex会在plot创建时影响自动缩放。它不会被存储以在进一步调用autoscale时生效。

除了第一个轴之外,一个选项通常是autoscaling off

import matplotlib.pyplot as plt

fig, ax_arr = plt.subplots(2, 1, sharex=True)

ax_arr[1].set_autoscalex_on(False)

for ax in ax_arr.flat:
    ax.plot([0,1], [0,1])
    ax.plot([0,2], [0,1], scalex=False)

plt.show()

enter image description here

答案 1 :(得分:1)

我已经接受了ImportanceOfBeingErnest的答案,因为它确实解决了我上面的特定最小例子。作为我的真实"例子涉及子图,其中每个轴上的第一个图不会相同,我将这个进一步的答案包括在内,以防其他人使用:

fig, ax_arr = plt.subplots(2, 1, sharex=True)

ax_arr.flat[0].plot([0,1], [0,1])
ax_arr.flat[1].plot([-1,0], [0,1])

for ax in ax_arr.flat:
    ax.set_autoscalex_on(False)
    ax.plot([0,2], [0,1])

enter image description here