我在谷歌搜索但没有得到答案。我创建了一个由2个轴组成的子图,称为plt.gca(),但每次只引用子图中轴的最后一个轴。然后我开始怀疑是否有可能通过传入一些kwargs来获得特定的轴但是没有找到这样的参数。我真的想知道plt.gca()是如何工作的以及为什么你不能指定要获得哪个轴。
答案 0 :(得分:5)
gca
表示“获取当前轴”。
这里的“当前”意味着它提供了最后一个活动轴的句柄。如果还没有轴,则会创建一个轴。如果创建两个子图,则最后创建的子图是当前的子图。
没有gca(something)
这样的东西,因为这会转化为“获取当前轴不是当前轴” - 声音已经不合逻辑了,不是吗?
确保您拥有绘图中任何轴的句柄的最简单方法是自己创建该句柄。 E.g。
ax = plt.subplot(121)
ax2 = plt.subplot(122)
然后,您可以在此之后的任何时候使用ax
或ax2
来操纵所选择的轴。
还要考虑使用subplots
(注意s)命令,
fig, (ax, ax2) = plt.subplots(ncols=2)
如果您没有手柄或忘记创建手柄,您可能会得到一个手柄,例如通过
all_axes = plt.gcf().get_axes()
ax = all_axes[0]
获得第一个轴。由于图中没有轴的自然顺序,因此只有在没有其他选项可用时才能使用。
答案 1 :(得分:4)
作为重要性的补充,我想我会指出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()
所以你会注意到我们能够重复使用相同的代码来绘制并为两个轴添加标签。