设置_position()后的matplotlib twinx奇怪行为

2024-06-26 02:16:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个函数,它可以让我很容易地在绘图的任何地方添加寄生虫轴,但我遇到了一个奇怪的情况。请看下面的代码:

import matplotlib.pyplot as plt

plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
plt.gca().twinx()

plt.show()

上述代码生成下图: enter image description here

如您所见,twinx绘图是使用主机绘图的旧位置生成的。我本来希望在主机绘图的新位置上生成twinx绘图

如何在主体图的新位置绘制twinx图?(我知道事先绘制twinx图“解决”了这一问题,但这不是一个实际的解决方案

谢谢你的帮助


Tags: 函数代码import绘图plotmatplotlibas地方
2条回答

我通过反复试验找到了解决这个问题的办法。然而,应该注意的是,我不知道twinx是如何工作的,我对matplotlib非常熟悉,因此我肯定无法理解正在发生的任何事情

为了解决这个问题,我在创建twinx之前使用了plt.gcf().subplots_adjust()。但是,这样做会有效地破坏新的位置,因此我事先保存了它们,以便在创建twinx之后能够重新应用它们。代码变为:

import matplotlib.pyplot as plt

plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
pos = plt.gca().get_position()     #added line
plt.gcf().subplots_adjust()        #added line
plt.gca().twinx()
plt.gca().set_position(pos)        #added line

plt.show()

不过,我仍然愿意阅读一些比我更好的答案,所以请随意给出您的建议

注意:上面的代码看起来相当愚蠢(我设置位置只是为了重置它,然后稍后重新应用),但在我的实际应用程序中,第一个set_position将由前面的函数调用执行,而后面的函数调用需要添加twinx,因此这确实有一个用例

您可以在调用twinx之后,使用twinx之前的初始设置中的位置数据来设置轴的位置

有几种方法可以做到这一点

import matplotlib.pyplot as plt

# Create original plot
plt.plot()
ax = plt.gca()
ax.set_position([1/3,1/3,1/3,1/3])
# Make twin axes.
ax2 = ax.twinx()
ax2.set_position(ax.get_position())

plt.show()

或者,您可以执行ax.set_position(ax.get_position())。但是一个关键点是将原始轴记录到变量中,因为一旦调用gcatwinx就指向新轴(位置错误)

如果不想将轴存储在变量中,可以将轴位置存储在变量中

import matplotlib.pyplot as plt

# Create original plot
plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
# Make twin axes
pos = plt.gca().get_position()
plt.gca().twinx()
plt.gca().set_position(pos)

plt.show()

不必放弃以前设置的位置

相关问题 更多 >