Matplotlib 是 Python 2D绘图领域使用相对广泛的套件,它能让使用者很轻松地将数据图形化,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。
Matplotlib的初心就是为Python提供一个能够绘图的工具,使用方法有点类似于传统的数据工具软件MATLAB。Matplotlib用来绘制各种静态,动态,交互式的图表,并且提供多样化的输出格式。
# 导入相关的库
import numpy as np
import matplotlib.pyplot as plt
# 魔法命令,在线显示绘制图像
%matplotlib inline
#生成 x,并计算 y
x = np.linspace(0,2*np.pi,100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图像
plt.plot(x,y1)
plt.plot(x,y2)
在 Matplotlib 中绘制的所有东西,即 Matplotlib 绘制的元素,都是 Artist 对象——“ 画家 ”的职责就是绘制各种对象,它能绘制的对象有两类,一类是基本元素(primitives)类,如 Text 、Line2D、Rectangle 等;另一类是容器(container)类,如 Figure(画布,窗口),Axes(描述数学中的坐标系), Axis (坐标轴),这种对象可以再包含 Artist 的其他多个基本元素类型。
首先在绘图前我们先创建 Figure 对象,如同展开一个画布,在这张画布上绘制各种对象。
# 导入相关的库
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# 创建画布
fig = plt.figure()
然后我们使用变量 fig 所应用的 Figure 对象的方法,在画布上进行画图的操作。
# add_axes() 是 Figure 实例对象的一个方法,执行fig.add_axes()即在画布上创建一个 Axes 对象。
ax=fig.add_axes([0.1,0.1,0.8,0.8]) #参数[左、底、宽、高]
也可以直接创建一个包含一个 axes 的 figure。如:
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
line,=ax.plot([1, 2, 3, 4], [1, 4, 2, 3]); # 绘制图像
line.set_color('r')
line.set_marker('*')
还可以通过一种更简单的方式绘制图像,matplotlib.pyplot 方法能够直接在当前 axes 上绘制图像,如果用户未指定 *axes *,matplotlib 会帮你自动创建一个。所以上面的例子也可以简化为以下这三行代码。
line, =plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
line.set_color("r")
line.set_marker("*")
在 Jupyter notebook 中使用 Matplotlib 时会发现,代码运行后自动打印出类似[
如图所示是一张画布 Figure 的解剖图,我们可以看到一个完整的 Matplotlib 图像通常包括一下四个层级,这些层级也被称为容器(container),我们通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。
matplotlib 提供了两种最常用的绘图接口:
import numpy as np
import matplotlib.pyplot as plt
# 使用linspace函数生成x,即生成开始值为0,结束值为2,元素数量为100的等差数列
x = np.linspace(0,2,100)
# 创建一个包含一个axes的figure
fig,ax = plt.subplots()
# 绘制图像
ax.plot(x,x,label = 'linear')
ax.plot(x,x**2,label = 'quadratic')
ax.plot(x,x**3,label = 'cubic')
# 设置x,y轴标签和图像标题
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
# 显示图例
ax.legend()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(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()
plt.show()
Matplotlib的知识点非常繁杂,在实际使用过程中也不可能将全部 API 都记住,很多时候都是边用边查。因此这里提供一个通用的绘图基础模板,任何复杂的图表几乎都可以基于这个模板骨架填充内容而成。
初学者刚开始学习时只需要牢记这一模板就足以应对大部分简单图表的绘制,在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。
# step1 导入库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# step2 准备数据
x = np.linspace(0,2,100)
y = x**2
z = x**3
# step3 设置绘图样式
mpl.rc('lines', linewidth=4, linestyle='-.')
# step4 定义布局
fig, ax = plt.subplots()
# step5 绘制图像
ax.plot(x, y, label='linear')
ax.plot(x,z,label='cubic')
# step6 添加标签,文字和图例
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend() ;
在使用 pyplot 绘制图像的时候,默认的 Figure 和 Axes 等对象会自动创建支持图形绘制,对于零基础的学习者较友好,使用方便简洁,可以快速上手。
在使用面向对象编程接口的时候,我们需要自己创建画布,自己创建对象,我们需要理解每个绘制过程,才能完成相关的绘图工作。
# step1 导入相关的库
import numpy as np
import matplotlib.pyplot as plt
# step2 生成数据
x = np.linspace(0,2,100)
y1 = x**2
y2 = x**3
# step3 绘图并设置样式和颜色
plt.plot(x,x,label = 'linear',linestyle = '-.',color = 'red')
plt.plot(x,y1,label = 'quadratic',linestyle= ':',color = 'green')
plt.plot(x,y2,label = 'cubic',linestyle = '--',color = 'orange')
# step4 添加标签、文字和图例
plt.xlabel('x label')
plt.ylabel('y label')
plt.title('Simple Plot')
plt.legend()
plt.show()