在此期间我正在使用matplotlib。我研究了很多例子,并且能够修改它以满足我的一些需求。但我想更好地了解库的一般结构。出于这个原因,除了在网上阅读了很多教程外,我还购买了电子书" Matplotlib for Python Developers",Tosi。虽然它充满了很好的例子,但我仍然没有完全掌握所有不同层次之间的关系。
这本书清楚地解释了matplotlib有3种主要"模式":
1)pylab,与Matlab类似地工作
2)pyplot,以程序方式工作
3)完整的OO系统
关于OO系统的目标,本书列出了3个级别:
1)FigureCanvas,图实例的容器类
2)图,Axes实例的容器
3)轴,包含基本元素的区域(线,点,文本......)
问题在于,通过阅读官方文档,我还遇到了后端和艺术家的概念。虽然我理解他们的基本逻辑,但我对他们对以前的分类的角色尊重感到很困惑。特别是,艺术家是否在ImageCanvas和Figure之间的中间层,或者在这种情况下不适合的层次结构?
我将很感激收到一些澄清,最终还会提到我可能错过的其他文件。 感谢。
答案 0 :(得分:8)
我不喜欢那些图层
pylab
:大量命名空间转储,可以提取pyplot
和numpy
中的所有内容。它不是一个'层。就像一个非常杂乱的名字空间。pyplot
:基于状态机的图层(它知道您的'当前轴'当前数字'是什么,并将函数应用于 axes / figure。当您在交互式终端(plt.subplots
或plt.figure
除外,用于设置图形/轴对象)时,您应该仅使用此 在这个图层与pylab
之间产生一种干扰是愚蠢的。这个是使它像MATLAB' Figure
是顶级容器对象。它们可以包含Axes
个对象和Artist
个对象(技术上Axes
Artists
,但是出于教学原因区分Axes
1}}图中的对象和其他艺术家(例如text
个对象)Figure
但与Axes
无关)并了解{{1}对象。每个Canvas
可以包含更多Axes
个对象。 Artists
是你想要放在图表上的有用的东西(线条,文字,图像等)。 Artists
知道如何在Artists
上绘制自己。当您致电Canvas
(或将图形渲染到屏幕上)时,fig.savefig
对象会遍历其所有儿童,并告诉他们自己画上自己的Figure
Canvas
Backends
1}}。
不同的Canvas
提供Canvas
个对象的实现,因此只需更改正在使用的{{1}}对象,就可以将相同的图形渲染到栅格或矢量图形。 / p>
除非您想要编写新的后端,否则其中许多细节并不重要,而且matplotlib会将它们隐藏起来,这就是它有用的原因。
如果这本书无法正确使用,我会把它所说的一切都拿出来。