Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib函数约定:子图与一个图_Python_Function_Matplotlib_Subplot - Fatal编程技术网

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

Python matplotlib函数约定:子图与一个图,python,function,matplotlib,subplot,Python,Function,Matplotlib,Subplot,我对matplotlib中使用子图和单个图形时函数之间的细微差异(这就是它们的名称吗?)感到非常困惑 例如: 如果我想更改单个图形上的xlim,我会这样做:plt.xlim() 如果我想更改子地块图形上的xlim,我会这样做:ax.set\u xlim() 为什么会这样?有人能把我送到一个解释这些惯例的网站吗? 这是一个简单的例子,因为我知道它们是不同的,以及如何不同的,但有很多我不知道,我很难弄清楚,例如: 1) 要将集合应用于子批次:ax.collection(集合名称)。你是如何做到这一点

我对matplotlib中使用子图和单个图形时函数之间的细微差异(这就是它们的名称吗?)感到非常困惑

例如:

如果我想更改单个图形上的xlim,我会这样做:
plt.xlim()

如果我想更改子地块图形上的xlim,我会这样做:
ax.set\u xlim()

为什么会这样?有人能把我送到一个解释这些惯例的网站吗? 这是一个简单的例子,因为我知道它们是不同的,以及如何不同的,但有很多我不知道,我很难弄清楚,例如:

1) 要将集合应用于子批次:
ax.collection(集合名称)
。你是如何做到这一点的

2) 要将勾号标签应用于子批:
ax.xaxis.ticklebels(勾号标签)
。你是如何做到这一点的


对不起,这是一个很新的问题

您发现了pyplot/状态机接口和OO接口之间的差异。有关详细解释,请参阅和

有关更长的教程,请参见

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

重要课程
整个图形。跟踪所有子轴、少量“特殊”艺术家(标题、图形图例等)和画布。不要太担心画布,它是至关重要的,因为它是实际绘制图形以获得绘图的对象,但作为用户,它或多或少对您不可见

这就是你认为的“绘图”,它是图像的区域和数据空间。它有2个或3个对象(x、y,有时还有z),a包含一大堆艺术家

Axis
这些是类似于数字线的对象。它们负责设置图形限制并生成记号和记号标签。它们有一个
定位器
和一个
格式化程序
,用于排序记号的位置以及如何生成标签

Artist
基本上,你在图形上看到的一切都是艺术家(甚至是
图形
,以及
对象)。这包括
Text
对象、
Line2D
对象、
collection
对象、
Patch
对象。。。(你明白了)。渲染图形时,所有艺术家都(递归地)绘制到画布上。给定的艺术家只能在一个
轴上

API层
pylab
这基本上只是一个名称空间,一大堆东西(numpy、pyplot、mlab(与matplotlib一起提供))通过
从foo import*
批量导入。这对于交互式工作非常方便,但不应使用它。这项研究的最初目标是

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

面向对象层 这是实际管理艺术家创建的层(例如,
ax.plot(…)
创建一组
Line2D
对象)。对于编写脚本或任何您想要重复使用的东西,这是您应该尝试使用的层。要编写自己的绘图函数,我建议编写如下函数:

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