目录
一、Artist 介绍
使用Artist 对象在画布上渲染。
Matplotlib API有三层:
matplotlib.backend_bases.Figucanvas是图形绘制的区域
matplotlib.backend_bases.Renderer是知道如何在figucanvas上绘制的对象
而matplotlib.artist.Artist 是一个知道如何使用渲染器在画布上作画的对象
FigureCanvas 和 Renderer 解决和用户界面(如 wxPython)或绘图语言(如 PostScript)间通信的所有细节。而Artists 解决figure,text,lines这些元素的呈现和布局相关的所有细节。通常95%的时间都会花在 Artists 上。
这就像你拿着画笔在画板上画画一样。你就是艺术家(Artist),拿着你的专用画笔(Renderer),在你面前的画板(FigureCanvas)尽情的释放想象力。
Artists 有两种类型:primitives(图元)和 containers (容器)。primitives 呈现的是我们想要在canvas上绘制的标准图形对象,比如 Line2D
, Rectangle
, Text
, AxesImage
等
。containers 是用来放置它们的(Axes,Axis,Figure)。
绘图的标准步骤是:
- 创建一个 figure 实例
- 使用 figure 实例创建一个或多个 Axes 或 Subplot 实例
- 使用 Axes实例方法创建 primitives
二、Artists常见属性及用法
函数 | 描述 |
alpha |
设置透明度。值为[0,1] |
animated |
布尔值。用于控制绘制动画 |
axes |
Artist 所在 axes 实例, 可能为 None |
clip_box |
裁剪 Artist 的边界框 |
clip_on |
是否进行裁剪 |
clip_path |
用于裁剪的 path |
contains |
检查 artist 是都包含选择点的函数 |
figure |
Artist 所在 figure 实例, 可能是 None |
label |
文本 label |
picker |
控制对象选择的 python 对象 |
transform |
transformation |
visible |
是否绘制 artist 的布尔值 |
zorder |
决定绘制顺序的数字 |
rasterized |
布尔值; 是否将向量转换为光栅图形(出于压缩& EPS透明度) |
三、对象容器
总共有两种对象: 图元 和 容器。图元 就是你想要改变属性的东西(比如 Text 实例的 font,Line2D 的宽度等),当然 容器 也有一些属性。例如:Axes Artist 就是一个容器(containers),其中包含了很多 图元。也有一些其它属性,比如 xscale 用于控制 xaxis 刻度是 'linear' 还是 'log'。
四、Figure 容器
顶层容器是 matplotlib.figure.Figure
,它包含了 figure 中的所有东西。figure 的背景就是存储在 Figure.patch 中的 Rectangle 实例。
当使用 add_subplot 添加 subplots 或 使用 add_axes 添加 axes 时,这些东西最终都会被添加到 Figure.axes 中。
In [156]: fig = plt.figure()
In [157]: ax1 = fig.add_subplot(211)
In [158]: ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])
In [159]: ax1
Out[159]: <AxesSubplot:>
In [160]: print(fig.axes)
[<AxesSubplot:>, <matplotlib.axes._axes.Axes object at 0x7f0768702be0>]
这是因为 figure 包含了 当前轴(current axes) 的概念。从而支持 pylab/pyplot 状态机(state machine),这就是当使用 pyplot 中的命令绘图时不需要指定 figure,axes 的原因,和matlab绘图时一样,所有的绘图操作默认都是针对当前轴的。
添加和删除 axes 时不要直接操作 axes 列表,而是通过 add_subplot 和 add_axes 方法进行添加,使用 delaxes 方法执行删除操作。现在,你可以非常轻松的迭代 axes 列表,从而获取每一个 axes 实例并设置其属性。
下面是一个打开所有axes 网格的例子,除此之外,你还可以设置很多属性。
for ax in fig.axes:
ax.grid(True)
figure 也包含属于自己的 texts, lines, patchs, images,你都可以直接添加 图元。
figure 默认的坐标系统是 pixels坐标,即像素坐标(这不是通常需要的坐标),但可以通过设置 transform 参数控制。