了解matplotlib:plt,figure,ax(arr)?

dan*_*451 31 python plot matplotlib figure

我并不陌生matplotlib,我很惭愧地承认我一直将它作为一种工具,尽可能快速简便地获得解决方案.所以我知道如何获得基本情节,子图和东西,并且有不少代码可以不时重复使用......但我没有"深入(呃)知识" matplotlib.

最近我想我应该改变这个并通过一些教程自己动手.但是,我仍然对matplotlibs感到困惑plt,fig(ure)并且ax(arr).真正的区别是什么?

在大多数情况下,对于一些"quick'n'dirty"绘图,我看到人们只使用pyplot as plt和直接绘图plt.plot.由于我经常使用多种内容进行绘制,我经常使用f, axarr = plt.subplots()...但是大多数时候你只看到代码放置数据进入axarr并忽略了这个数字f.

所以,我的问题是:什么是使用matplotlib的干净方式?何时使用plt,应该使用什么或应该figure使用什么?子图是否只包含数据?或者,对于样式,清理情节,......,在子图中,它是否有效且良好的做法?

我希望这不是广泛的.基本上我要求为plt< - > fig< - > ax(arr)(以及何时/如何正确使用它们)的真正目的提出一些建议.

教程也是受欢迎的.matplotlib文档对我来说相当混乱.当人们搜索一些非常具体的东西时,比如重新标记一个图例,不同的情节标记和颜色等等,官方文档确实非常准确,但在我看来,一般信息并不是那么好.太多不同的例子,没有真正的目的解释......看起来或多或少像是所有可能的API方法和参数的大清单.

kik*_*oso 16

pyplot是matplotlib中的'脚本'级别API(它是使用matplotlib做很多事情的最高级API).它允许您使用程序界面使用matplotlib,方法与使用Matlab进行操作相似.pyplot有一个'当前数字'和'当前轴'的概念,所有功能都委托给(@tacaswell dixit).因此,当您使用模块上可用的功能时,pyplot您正在绘制"当前图形"和"当前轴".

如果你想要"细粒度"控制你正在绘制的位置/什么,那么你应该使用Figure和的实例来使用面向对象的API Axes.

可用的函数pyplot有一个等效的方法Axes.

matplotlib的repo 解剖:

  • Figure是此层次结构中的顶级容器.这是整个窗口/页面,所有内容都是绘制的.您可以拥有多个独立的数字,并且Figure可以包含多个轴.

但...

  • 大多数情节都发生在Axes.轴实际上是我们绘制数据的区域以及与之相关的任何刻度/标签/等.通常我们会建立一个Axes与调用插曲(哪个地方Axes经常网格),所以在大多数情况下,Axes并且Subplot是同义的.

  • 每个Axes都有一个XAxis和一个YAxis.这些包含刻度线,刻度线位置,标签等.

如果您想了解情节的解剖结构,可以访问此链接.


Fir*_*ane 5

我认为教程很好地解释了 matplotlib 对象层次结构的基本概念,如 Figure 和 Axes,以及当前图形和当前 Axes 的概念。

如果您想快速回答:有一个 Figure 对象,它是包装多个 Axes(与轴不同)的容器,其中还包含较小的对象,如图例、线条、刻度线......如从matplotlib获取的图像所示文件

在此处输入图片说明

所以当我们做

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> type(fig)
<class 'matplotlib.figure.Figure'>
>>> type(ax)
<class 'matplotlib.axes._subplots.AxesSubplot'>
Run Code Online (Sandbox Code Playgroud)

我们已经创建了一个 Figure 对象和一个包含在该图中的 Axes 对象。