认识matplotlib
Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。
Matplotlib已经成为python中公认的数据可视化工具,我们所熟知的pandas和seaborn的绘图接口其实也是基于matplotlib所作的高级封装。
一个最简单的绘图例子
Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。
import matplotlib.pyplot as plt import numpy as np
fig, ax = plt.subplots() # 创建一个包含一个axes的figure ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
matplotlib.pyplot
方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。所以上面也可以简化为以下这一行代码。
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
Figure的组成
一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器
Figure
:顶层级,用来容纳所有绘图元素
Axes
:容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis
:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick
:axis的下属层级,用来处理所有和刻度有关的元素
将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果
两种绘图接口
matplotlib提供了两种最常用的绘图接口
- 显式创建figure和axes,在上面调用绘图方法
- 依赖pyplot自动创建figure和axes,并绘图
x = np.linspace(0, 2, 100) fig, ax = plt.subplots() ax.plot(x, x, label='linear') ax.plot(x, x**2, label='quadratic') ax.plot(x, x**3, label='cubic') ax.set_xlabel('x label') ax.set_ylabel('y label') ax.set_title("Simple Plot") ax.legend()
采用第二种绘图接口,绘制同样的图:
x = np.linspace(0, 2, 100) # 生成了一个从0到2的数组,包含100个元素 plt.plot(x, x, label='linear') plt.plot(x, x**2, label='quadratic') plt.plot(x, x**3, label='cubic') plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.legend()
matplotlib的三层API
matplotlib的基础逻辑是,用Artist对象在画布(canvas)上绘制(Render)图形。
就和人作画的步骤类似:
- 准备一块画布或画纸
- 准备好颜料、画笔等制图工具
- 作画
所以matplotlib有三个层次的API:
matplotlib.backend_bases.FigureCanvas 代表了绘图区,所有的图像都是在绘图区完成的
matplotlib.backend_bases.Renderer 代表渲染器,可以理解为画笔,控制如何在Canvas 上图。
matplotlib.artist.Artist 代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图。
前两者处理程序和计算机的底层交互的事项,第三项Artist就是具体的调用接口来做出我们想要的图,比如图形、文本、线条的设定。
Artist的分类
Artist有两种类型:primitives 和containers。
primitive是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。
Matplotlib的详细使用及原理(二)+https://developer.aliyun.com/article/1543861?spm=a2c6h.13148508.setting.15.1fa24f0edL5ePi