fig.gca()与fig.add_subplot()的区别

25

大多数面向对象的matplotlib示例都会使用类似以下方式获取一个Axis对象:

import matplotlib.pyplot as plt

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)

ax1.plot(...... etc.

我一直觉得这是不明显的,尤其是从Matlab的角度来看。

最近我发现可以通过等效结果来获得

ax1 = fig1.gca()   # "GetCurrentAxis"

对我来说更有意义(可能仅由于先前使用过Matlab)。

为什么选择具有令人困惑的111参数的add_subplot()作为获取轴对象的首选方式?是否有任何功能上的区别?

谢谢!

2个回答

26
< p > < code >plt.gca< /code >获取当前轴,如果需要会创建一个。仅在最简单的情况下才等价于1个轴。

更好的方法是使用plt.subplots(文档和示例确实滞后了一些,如果您想开始贡献,更新文档是一个很好的起点):

fig, ax = plt.subplots(1, 1)
或者
fig, (ax1, ax2) = plt.subplots(2, 1)

等等。


谢谢!我非常喜欢你展示的plt.subplots()方法 - 我只是惊讶于它被称为“首选方式”,但我以前从未见过。它是否在某个地方被指定为首选方式,还是每个用户都可以决定哪种技术最有意义? - Demis
1
不确定文档中确切的位置,但这是我对开发人员共识的理解。 - tacaswell
现在几年过去了,大多数MPL示例现在都使用plt.subplots(),除了以下几个: "Surface3d"(gca),"Multiple Subplots"(subplot),"streamplot"(fig.add_subplots),"Polar Plots"(suplot),XKCD(fig.add_axes)。来源:https://matplotlib.org/3.2.1/tutorials/introductory/sample_plots.html - Demis
在Github上发布了一个关于文档的问题:https://github.com/matplotlib/matplotlib/issues/17023#issuecomment-608947135 - Demis

1
创建3D实例有三种方法:
plt.gca(projection='3d')

plt.subplot(projection='3d')

fig = plt.figure()
fig.add_subplot(111, projection='3d') 

也许第三种方式更复杂。

不要忘记还有第四种方法(命令),即“子图”。 - High Performance Rangsiman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接