gpt4 book ai didi

python - Matplotlib:使用 twinx() 和 cla() 清除第二个轴后无法重新绘制第一个轴

转载 作者:行者123 更新时间:2023-12-01 04:56:36 24 4
gpt4 key购买 nike

我在第二个轴上遇到了一个奇怪的问题...不确定我是否做错了什么。

来自 twinx example双轴代码

import numpy as np
import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()


t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')

plt.show()

我得到下图。

sample

如果我在绘制之前通过在 plt.show() 之前添加 ax1.cla() 来清除第一个轴,它将按预期清除第一个轴。

clear first axis

如果我在绘制之前通过在 plt.show() 之前添加 ax2.cla() 来清除第二个轴,则会清除两个轴。不太像预期的那样,但似乎是 a known issue 。 (编辑:也许它没有完全清除两个轴,第一个轴的轴标签仍然是蓝色...)

enter image description here

就我的目的而言,这不是问题,因为无论如何我都想清除两个轴。但是当我尝试重新绘制情节时,我遇到的问题出现了。如果我运行以下代码来设置两个轴,然后清除两个轴,然后再次设置它们。

import numpy as np
import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()


t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')

# single line addition to the two_scales.py example
# clears both ax2 and ax1 under matplotlib 1.4.0, clears only ax2 under matplotlib 1.3.1
# obviously, same result with ax2.clear() method
ax1.cla()
ax2.cla()

# Set up the axis again

t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')


plt.show()

我看到了下图。由于某种原因,当我重新绘制两个轴时,它不会显示第一个轴。

enter image description here

我做错了什么还是这种行为是预期的?是否有任何解决方法可以清除并重新绘制两个轴图?

最佳答案

我认为问题在于您正在通过再次调用 twinx 创建一个 ax2。但原来的孪生轴仍然存在,并且由于您提到的错误,它被设置为不透明,因此它仍然隐藏 ax1。换句话说,您提到的错误导致 ax1 不可见,因为不透明的 ax2 堆叠在其顶部;您的代码只是在 ax2 之上堆叠了另一个轴,这仍然使 ax1 被“中间”的轴遮挡。

我们可以从 the fix 获取如何修复它的线索对于你提到的错误。尝试在代码末尾(就在 show 之前)执行 ax2.patch.set_visible(False) 。当我这样做时,两个图都会正确显示。

关于python - Matplotlib:使用 twinx() 和 cla() 清除第二个轴后无法重新绘制第一个轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com