关于艺术家在matplotlib层次结构中的位置的困惑

时间:2014-05-15 20:41:12

标签: python matplotlib

在此期间我正在使用matplotlib。我研究了很多例子,并且能够修改它以满足我的一些需求。但我想更好地了解库的一般结构。出于这个原因,除了在网上阅读了很多教程外,我还购买了电子书" Matplotlib for Python Developers",Tosi。虽然它充满了很好的例子,但我仍然没有完全掌握所有不同层次之间的关系。

这本书清楚地解释了matplotlib有3种主要"模式":

1)pylab,与Matlab类似地工作

2)pyplot,以程序方式工作

3)完整的OO系统

关于OO系统的目标,本书列出了3个级别:

1)FigureCanvas,图实例的容器类

2)图,Axes实例的容器

3)轴,包含基本元素的区域(线,点,文本......)

问题在于,通过阅读官方文档,我还遇到了后端和艺术家的概念。虽然我理解他们的基本逻辑,但我对他们对以前的分类的角色尊重感到很困惑。特别是,艺术家是否在ImageCanvas和Figure之间的中间层,或者在这种情况下不适合的层次结构?

我将很感激收到一些澄清,最终还会提到我可能错过的其他文件。 感谢。

1 个答案:

答案 0 :(得分:8)

我不喜欢那些图层

  • pylab:大量命名空间转储,可以提取pyplotnumpy中的所有内容。它不是一个'层。就像一个非常杂乱的名字空间。
  • pyplot:基于状态机的图层(它知道您的'当前轴'当前数字'是什么,并将函数应用于 axes / figure。当您在交互式终端(plt.subplotsplt.figure除外,用于设置图形/轴对象)时,您应该仅使用此 在这个图层与pylab之间产生一种干扰是愚蠢的。这个是使它像MATLAB'
  • 一样的层。
  • OO层:您应该在所有脚本中使用

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会将它们隐藏起来,这就是它有用的原因。

如果这本书无法正确使用,我会把它所说的一切都拿出来。