Matplotlib2.元素容器
一、概述
1. matplotlib的三层api
matplotlib.backend_bases.FigureCanvas
绘图区(画布)
matplotlib.backend_bases.Renderer
渲染器(画笔)
matplotlib.artist.Artist
具体图表组件(作画,调用 Render 的接口在 Canvas 上作图)
其实,大部分时间都是与 Artist 类打交道。
2. Artist 的分类
Artist 有两种类型:primitves
和 containers
。
primitive 是基本要素,它包含一些标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container 是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。
3. matplotlib 标准用法
matplotlib的标准使用流程为:
(1) 创建一个Figure实例
(2) 使用Figure实例创建一个或者多个Axes或Subplot实例
(3) 使用Axes实例的辅助方法来创建primitive
Axes 是一种重要容器,它可能是matplotlib API中最重要的类,并且我们大多数时间都花在和它打交道上。
import matplotlib.pyplot as plt
import numpy as np
# step 1
# 用 matplotlib.pyplot.figure() 创建了一个Figure实例
fig = plt.figure()
# step 2
# 然后用Figure实例创建了一个两行一列(即可以有两个subplot)的绘图区
# 在第一个位置创建一个subplot
ax = fig.add_subplot(2, 1, 1)
# 在第二个位置创建一个subplot
bx = fig.add_subplot(2, 1, 2)
# step 3
# 然后用Axes实例的方法画曲线
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2 * np.pi * t)
line1, = ax.plot(t, s, color='blue', lw=2)
line2, = bx.plot(t, -s, color='red', lw=2)
plt.show()
二、自定义 Artist 对象
1. Artist 属性
图形中每个元素对应一个 Artist ,且都有其对应的属性列表。
Patch是一个来源于MATLAB的名词,它是图形上颜色的一个2D补丁,包含rectangels-矩形,circles-圆 和 plygons-多边形。
Figure.patch
属性:是一个 Rectangle,代表图表的矩形框,可设置 figure 的背景色、透明度等。
Axes.patch
属性:也是 Rectangle,代表绘图坐标轴内部的矩形框(白底黑边),可设置 axes 的颜色、透明度等。
每个 Artist 都有以下属性:
alpha
透明度,0~1之间的浮点数axes
返回这个 Artist 所属的 axes,可能为 Nonefigure
返回这个 Artist 所属的 figure,可能为 Nonelabel
一个 text labelvisible
布尔值,控制 Artist 是否绘制
2. 属性的调用
Artist 对象所有属性都有相应的 get_*
和 set_*
函数进行读写;也可用 set
方法一次设置多个属性;可用 matplotlib.artist.getp
获取指定的属性,若不指定属性名则返回所有属性和值。
f.set_alpha(0.5)
a = f.get_alpha()
f.set(alpha=0.5, zorder=2)
matplotlib.artist.getp(f, 'alpha')
matplotlib.artist.getp(fig.patch)
三、基本元素-ptimitives
第一部分概述里提到,Artist包含两种对象:基本要素 primitives 和 容器 containers。此处介绍 primitives 的几种类型:曲线-Line2D,矩形-Rectangle,图像-image (其中文本-Text较为复杂,会在之后单独详细说明。)
1. 2DLines
matplotlib 中曲线绘制主要使用类 matplotlib.lines.Line2D 完成,基类是 matplotlib.artist.Artist。
构造函数:
class matplotlib.lines.Line2D(
xdata,
ydata,
linewidth=None,
linestyle=None,
color=None,
marker=None,
markersize=None,
markeredgewidth=None,
markeredgecolor=None,
markerfacecolor=None,
markerfacecoloralt='none',
fillstyle=None,
antialiased=None,
dash_capstyle=None,
solid_capstyle=None,
dash_joinstyle=None,
solid_joinstyle=None,
pickradius=5,
drawstyle=None,
markevery=None,
**kwargs)
其中常用的参数:
xdata
li