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

4

如果我拥有

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关键字参数似乎没有效果:

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或设置可以用来阻止绘制的线影响axes xlim?


注:kwarg是Python函数中的关键字参数。
2个回答

2

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

一种选择是关闭所有除第一个轴之外的通用自动缩放,详情请参考set_autoscalex_on

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

我已经接受了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


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