matplotlib函数约定:子图与一个图

时间:2014-07-02 00:46:43

标签: python function matplotlib subplot

在使用子图和单个图时,我在matplotlib中对函数的微妙差异(它们被称为是什么?)感到非常困惑。

举个例子:

如果我想在单个数字上更改xlim,我会这样做:plt.xlim()

如果我想更改子图上的xlim,我会这样做:ax.set_xlim()

这是为什么?任何人都可以将我发送到解释惯例的网站吗? 这是一个简单的例子,因为我知道它们是不同的,以及如何,但有许多我不知道的,我很难搞清楚 - 例如:

1)将集合应用于子图:ax.collection(collection_name)。你如何为一个人物做这件事?

2)将刻度标签应用于子图:ax.xaxis.ticklabels(tick_labels)。你如何为一个人物做这个?

对不起,这是一个新问题!

1 个答案:

答案 0 :(得分:8)

您正在点击pyplot /状态机界面和OO界面之间的差异。有关详细说明,请参阅Which is the recommended way to plot: matplotlib or pylab?How can I attach a pyplot function to a figure instance?

有关更长时间的教程,请参阅Anatomy of Matplotlib

mpl中的对象层也存在一些混淆:

重要课程

Figure

整个数字。跟踪所有儿童,一小部分“特殊”艺术家(标题,图形图例等)和画布。不要过于担心画布,它是至关重要的,因为它是实际绘图的对象,以获得你的情节,但作为用户,它或多或少是你不可见的。

Axes

这就是你所说的“情节”,它是具有数据空间的图像区域。它有2或3个对象(x,y,有时是z),并且包含一大堆艺术家

Axis

这些是像对象一样的数字行。他们负责设置图表限制并生成刻度和刻度标签。他们有一个Locator和一个Formatter来整理蜱的去向以及如何生成标签

Artist

基本上,您在图中看到的所有内容都是艺术家(甚至是FigureAxesAxis个对象。这包括Text个对象,Line2D个对象,collection个对象,Patch个对象......(您明白了)。渲染图形时,所有艺术家都会(递归地)绘制到画布。给定的艺术家只能在一个Axes

API图层

pylab

这基本上只是一个名称空间,通过from foo import *批量导入一大堆东西(numpy,pyplot,mlab(附带matplotlib))。这对于交互式工作来说非常方便,但是你不应该使用脚本。这个

的最初目标

pyplot

这是一个状态机图层,可跟踪所有打开的数字,并具有“当前数字”(plt.gcf())和“当前轴”(plt.gca())的概念。 pyplot中的大多数函数都是围绕对OO层(plt.foo() - > plt.gca().foo()plt.gcf().foo()的调用非常精简(按程序生成)包装器,具体取决于函数)。同样,这可能方便,但很快就会变得有限/混乱/全局状态会造成麻烦。

OO层

这是实际管理艺术家创作的图层(ex ax.plot(...)创建了一堆Line2D个对象)。对于编写脚本或任何您打算重用的东西,这是您应该尝试使用的层。要编写自己的绘图函数,我建议编写如下函数:

def my_plotting_fun(ax, data, data, ...):
     ax.do_stuff
     return list_of_artists_added