matplotlib Axes.plot()vs pyplot.plot()

时间:2017-04-18 21:05:50

标签: python matplotlib plot

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)

是否有可能优先使用一个而不是另一个?

5 个答案:

答案 0 :(得分:9)

对于绘制单个图,最佳做法可能是

fig = plt.figure()
plt.plot(data)
fig.show()

现在,让我们看看问题中的3个例子并解释它们的作用。

  1. 获取当前的图形和轴(如果不存在则会创建一个新图形和轴)并绘制成它们。

    line = plt.plot(data)
    
  2. 在您的情况下,行为与以前相同,并明确说明 情节轴。

    ax = plt.axes()
    line = ax.plot(data)
    

    如果要绘制成多个轴(可能在一个图中),这种使用ax.plot(...)的方法是必须的。例如,使用subplots

  3. 明确地创建新图 - 您不会向前一个添加任何内容。 显式创建一个给定矩形的新轴,其余的是 与2相同。

    fig = plt.figure()
    ax = fig.add_axes([0,0,1,1])
    line = ax.plot(data)
    

    使用figure.add_axes的可能问题是它可能会添加一个新的轴对象 到图中,它将覆盖第一个(或其他)。如果这发生了 请求的大小与现有大小不匹配。

答案 1 :(得分:4)

基本上没有区别。 plt.plot将在某个时刻(在确定有一个图形和一个可用于绘图的轴之后)从该轴实例调用绘图函数。

所以主要区别在于用户方面:

  • 你想使用类似Matlab的状态机方法,这可能会为简单的绘图任务节省一些代码行吗?然后使用pyplot
  • 您是否希望使用更加pythonic面向对象的方法完全控制绘图?然后明确地使用像轴这样的对象。

您可能需要阅读matplotlib usage guide

答案 2 :(得分:0)

Pyplot的绘图方法可以应用于Pyplot根(pyplot.plot())或轴对象(axes.plot())。

直接在Pyplot库(pyplot.plot())上调用绘图函数会创建一个默认子图(图和轴)。在轴对象(axes.plot())上调用它需要您已经创建了自己的轴对象,并将图形放置到该自定义绘图空间上。

虽然pyplot.plot()易于使用,但是如果创建轴对象axes.plot(),则可以更好地控制空间(并且更好地理解与其他库的交互)。

Axes.plot()返回轴对象。每个轴对象都有一个父图形对象。 axes对象包含用于绘制的方法以及大多数自定义选项,而Figure对象则存储所有图形级属性,并允许将图形输出为图像。

如果使用pyplot.plot()方法并想开始自定义轴,则可以通过调用pyplot.gca()来“获取当前轴”来找出它创建的默认轴对象的名称。

答案 3 :(得分:0)

python plt.plot():它将创建许多默认子图并保存许多代码行,并且易于理解

Axes.plot():使用axes对象将为您提供更多自定义绘图空间的功能

答案 4 :(得分:0)

如果这仍然相关,matplotlib的官方网站对这个问题有明确的答案。转到此链接的 "The object-oriented interface and pyplot interface" 部分。¶

本节清楚地回答了这个问题。使用 'fig, ax' 即面向对象的方法为自定义绘图提供了更多控制。另一方面,使用“pyplot”让我们对绘图的控制更少,但优点是它可以让我们免于编写更多代码行,并且在处理单个绘图时更容易和方便。

matplotlib 的官方文档表明----“使用哪种方法完全是个人的选择,没有比另一种偏好。但是,最好坚持一种方法以保持一致性。 “