我正在做一个函数,它可以让我很容易在任何地方添加寄生虫轴,但是我遇到了一个奇怪的情况。看看下面的代码:
import matplotlib.pyplot as plt
plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
plt.gca().twinx()
plt.show()上面的代码显示如下所示:

如您所见,使用宿主图的旧位置生成孪生图。我原以为在宿主情节的新位置上会产生孪生情节。
我如何在宿主图形的新位置上绘制一幅孪生图?(--我知道事先绘制孪生图“解决”了这个问题,但这不是一个实用的解决方案)
谢谢你的帮忙!
发布于 2020-07-01 02:40:58
我想出了一个通过反复试验来解决这个问题的方法。但是,应该注意的是,我不知道twinx是如何工作的,而且我在matplotlib方面非常初级,所以我肯定无法理解正在发生的任何事情。
我为解决这个问题所做的是在创建孪生之前使用了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,所以这是有一个用例的。
发布于 2021-10-21 02:21:41
您可以在调用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())。但是一个关键点是将原始轴记录到变量,因为gca在调用twinx时指向新的轴(它们的位置不对)。
如果不想将轴存储在变量中,则可以将轴位置存储在变量中。
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()没有必要抛出以前设置的位置。
https://stackoverflow.com/questions/62667696
复制相似问题