matplotlib Axes.plot() 与 pyplot.plot()
- 2025-03-04 08:23:00
- admin 原创
- 95
问题描述:
Axes.plot()
和方法之间有什么区别pyplot.plot()
?一个方法是否使用另一个方法作为子程序?
看来我的绘图选项是
line = plt.plot(data)
或者
ax = plt.axes()
line = ax.plot(data)
甚至
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
line = ax.plot(data)
有哪些情况更适合使用其中一种?
解决方案 1:
对于绘制单个图,最佳做法可能是
fig = plt.figure()
plt.plot(data)
fig.show()
现在,让我们看一下问题中的 3 个例子并解释它们的作用。
采用当前图形和轴(如果不存在则创建一个新的)并绘制到它们中。
line = plt.plot(data)
在您的情况下,行为与以前相同,明确说明绘图的轴。
ax = plt.axes()
line = ax.plot(data)
ax.plot(...)
如果要绘制多个轴(可能在一个图中),则必须使用这种方法。例如,当使用子图时。
明确创建新图形 - 您不会在前一个图形上添加任何内容。明确创建一个具有给定矩形形状的新轴,其余部分与 2 相同。
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
line = ax.plot(data)
可能出现的问题figure.add_axes
是,它可能会向图形添加一个新的轴对象,该对象将覆盖第一个轴对象(或其他轴对象)。如果请求的大小与现有大小不匹配,就会发生这种情况。
解决方案 2:
本质上没有区别。plt.plot
将在某个时候(在确保有一个图形和一个可用于绘图的轴之后)从该轴实例调用绘图函数。
因此主要的区别在于用户方面:
您是否想使用类似 Matlab 的状态机方法,这种方法可以为简单的绘图任务节省一些代码行?那么使用
pyplot
。您是否想使用更符合 Python 风格的面向对象方法完全控制绘图?那么请明确使用轴之类的对象。
您可能想要阅读 matplotlib使用指南。
解决方案 3:
Pyplot 的绘图方法可以应用于 Pyplot 根 (pyplot.plot()) 或轴对象 (axes.plot())。
直接在 Pyplot 库中调用绘图函数 (pyplot.plot()) 会创建默认子图(图形和轴)。在轴对象上调用该函数 (axes.plot()) 要求您已经创建了自己的轴对象,并将图形放到该自定义绘图空间中。
虽然 pyplot.plot() 很容易使用,但是如果您创建一个轴对象 axis.plot(),您就可以更好地控制您的空间(并且能够更好地理解与其他库的交互)。
Axes.plot() 返回一个轴对象。每个轴对象都有一个父图形对象。轴对象包含绘图方法以及大多数自定义选项,而图形对象存储所有图形级属性并允许绘图输出为图像。
如果您使用 pyplot.plot() 方法并想要开始自定义轴,则可以通过调用 pyplot.gca() 来“获取当前轴”,找出其创建的默认轴对象的名称。
解决方案 4:
python plt.plot()
:它会创建许多默认subplot
值,节省许多行代码并且易于理解。
Axes.plot()
:使用axes
对象将使您更好地自定义绘图空间。
解决方案 5:
如果这仍然相关,Matplotlib 的官方网站对这个问题有明确的答案。转到“面向对象接口和 pyplot 接口”。
本节清楚地回答了这个问题。使用“fig, ax”,即面向对象的方法,可以让我们更加控制自定义绘图。另一方面,使用“pyplot”会让我们对绘图的控制力减弱,但好处是,它使我们不必编写更多行代码,并且在处理单个绘图时更容易、更方便。
Matplotlib 的官方文档表明“使用哪种方法完全是个人的选择,没有哪种方法更受青睐。不过,坚持一种方法以保持一致性是好的。”
扫码咨询,免费领取项目管理大礼包!