【问题标题】:matplotlib Axes.plot() vs pyplot.plot()matplotlib Axes.plot() 与 pyplot.plot()
【发布时间】:2017-09-14 21:13:02
【问题描述】:

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)

在某些情况下使用其中一种比另一种更可取吗?

【问题讨论】:

标签: python matplotlib plot


【解决方案1】:

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

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

  1. 显式创建新图形 - 您不会在前一个图形上添加任何内容。 显式创建具有给定矩形形状的新轴,其余为 与 2 相同。

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

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

【讨论】:

  • 可能提到fig, ax = plt.subplots()
【解决方案2】:

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

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

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

您可能想阅读 matplotlib usage guide

【讨论】:

  • 感谢“使用指南”链接。在(重新)开始之前(在边做边学中打破头脑之后)必须阅读。
【解决方案3】:

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

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

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

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

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

【讨论】:

    【解决方案4】:

    pythonplt.plot():会创建很多默认的subplots,会省去很多行代码,而且很容易理解。

    Axes.plot():使用axes 对象将使您能够更好地自定义绘图空间。

    【讨论】:

      【解决方案5】:

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

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

      matplotlib 的官方文档建议---- “使用哪种方法完全是个人的选择,没有一种优于其他的偏好。但是,最好坚持一种方法以保持一致性。 "

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-25
        • 2021-10-27
        • 2023-03-09
        • 2014-04-07
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多