2017-07-28 88 views
0

我在谷歌搜索,但没有得到答案。我创建了一个由2个轴组成的子图并称为plt.gca(),但每次只引用子图中轴的最后一个轴。然后我开始怀疑是否有可能通过传入一些kwargs来获得特定的轴,但是没有找到这样的参数。我真的很想知道plt.gca()是如何工作的,以及为什么不能指定要获取哪个轴。plt.gca如何在内部工作

回答

2

gca表示“获取当前轴”。

此处的“当前”表示它提供了最后一个活动轴的句柄。如果还没有轴,则会创建一个轴。如果创建两个子图,则最后创建的子图是当前的子图。

有没有这样的事情gca(something),因为这将转化为“获取当前轴不是当前的轴” - 声音已经不合逻辑了,不是吗?

确保您有图柄中任何坐标轴的最简单方法是自己创建该坐标。例如。

ax = plt.subplot(121) 
ax2 = plt.subplot(122) 

然后你可以使用axax2在任何点之后的操作选择的轴。

也可以考虑使用subplots(注意S)命令,

fig, (ax, ax2) = plt.subplots(ncols=2) 

如果你没有一个手柄或忘记了创建一个,你可能会得到一个如通过

all_axes = plt.gcf().get_axes() 
ax = all_axes[0] 

获得第一个轴。由于图中没有自然顺序的轴,因此只能在没有其他选项可用的情况下使用。

+0

感谢您的回答!真的很感激它。 – aldnoah

+0

@aldnoah请记住[接受](https://meta.stackexchange.com/a/5235)答案,如果有帮助的话,这对社区是一个总体的好处。 –

+0

@Importance在你的答案中包含'plt.sca()'的简短讨论可能是值得的。 – saintsfan342000

1

作为重要的非常好的答案的补充,我想我会指出the pyplot command sca,它代表“设置电流轴”。

它将轴作为参数并将其设置为当前轴,因此您仍然需要对轴的引用。但是有些人可能会发现使用sca的东西是,您可以拥有多个轴并在所有这些轴上工作,同时仍然使用pyplot接口而不是面向对象的方法。

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = plt.subplot(121) 
ax2 = plt.subplot(122) 

# Check if ax2 is current axes 
print(ax2 is plt.gca()) 
# >>> True 

# Plot on ax2 
plt.plot([0,1],[0,1]) 
plt.xlabel('X') 
plt.ylabel('Y') 

# Now set ax as current axes 
plt.sca(ax) 

print(ax2 is plt.gca()) 
# >>> False 
print(ax is plt.gca()) 
# >>> True 

# We can call the exact same commands as we did for ax2, but draw on ax 
plt.plot([0,1],[0,1]) 
plt.xlabel('X') 
plt.ylabel('Y') 

plt.show() 

所以你会注意到我们能够重复使用相同的代码来绘制和添加标签到两个轴。