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