Axes.invert_axis()在使用matplotlib子图且sharey=True时无法正常工作

15

我正在尝试制作4个子图(2x2),并倒置y轴,同时在子图之间共享y轴。这是我的代码:

import matplotlib.pyplot as plt
import numpy as np

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True)

for ax in AX.flatten():
    ax.invert_yaxis()
    ax.plot(range(10), np.random.random(10))

enter image description here

似乎当sharey=True时,ax.invert_axis()被忽略了。如果我设置sharey=False,则在所有子图中都会得到一个反转的y轴,但是显然y轴不再在子图之间共享。这里我做错了什么吗?这是一个bug还是不应该做这样的事情?

1个回答

26

由于设置了sharey=True,现在三个轴的行为就好像它们是一个轴一样。例如,当您反转其中一个轴时,您会影响所有四个轴。问题在于您正在使用循环for翻转轴,该循环在长度为四的可迭代对象上运行,因此您正在为偶数次翻转所有轴...通过反转已经被反转的轴,您只需恢复其原始方向。尝试使用奇数个子图,您将看到轴已成功反转。

要解决问题,您应该仅对一个子图反转y轴(仅一次)。以下代码对我有效:

import matplotlib.pyplot as plt
import numpy as np

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True)

## access upper left subplot and invert it    
AX[0,0].invert_yaxis()

for ax in AX.flatten():
    ax.plot(range(10), np.random.random(10))

plt.show()

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