何时使用matplotlib.pyplot类以及何时使用plot对象(matplotlib.collections.PathCollection)

Xip*_*ias 11 python matplotlib

我想知道问题背后的逻辑是什么时候使用绘图实例(这是一个PathCollection)以及何时使用绘图类本身.

import matplotlib.pyplot as plt
p = plt.scatter([1,2,3],[1,2,3])
Run Code Online (Sandbox Code Playgroud)

提出散点图.为了使它工作,我不得不说:

plt.annotate(...)
Run Code Online (Sandbox Code Playgroud)

并配置轴标签或限制,你写:

plt.xlim(...)
plt.xlabel(...)
Run Code Online (Sandbox Code Playgroud)

等等.

但另一方面,你写道:

p.axes.set_aspect(...)
p.axes.yaxis.set_major_locator(...)
Run Code Online (Sandbox Code Playgroud)

这背后的逻辑是什么?我可以在某处查找吗?不幸的是,我没有在文档中找到这个特定问题的答案.

您何时使用实际实例p来配置图表,何时使用pyplot类plt

Ben*_*oot 7

根据PEP20:

  • "明确比隐含更好."
  • "简单比复杂更好."

通常,"make-it-just-work"代码采用pyplot路径,因为它隐藏了许多人不关心的所有图形和轴管理.这通常用于交互式模式编码,简单的一次性脚本或在高级脚本中执行的绘图.

但是,如果要创建要进行绘图的库模块,并且无法保证库用户没有对其自己进行任何其他绘图,则最好明确并避免使用pyplot接口.我通常将我的函数设计为接受用户想要操作的轴和/或图形对象作为可选参数(如果没有给出,则使用plt.gcf()和/或plt.gca()).

我的经验法则是,如果我正在执行的操作可以通过pyplot完成,但如果这样做可能会改变"状态机",那么我就避免使用pyplot.请注意,通过pyplot执行的任何操作(例如plt.xlim())都会获取/设置当前轴/图形/图像("状态机"),而ax.set_xlim()之类的操作则不会.