Matplotlib是一个Python 2D绘图库,可以进行数据可视化。
Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。
最简单的创建figure以及axes的方式是通过pyplot.subplots
命令,创建axes以后,可以使用Axes.plot
绘制最简易的折线图。
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
plt.show()
注意:matplotlib.pyplot
方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。所以上面的例子也可以简化为以下这一行代码。
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
一个完整的matplotlib图像会包括四个层级,这些层级也被称为容器(container),下一节会详细介绍。
Figure
:顶层级,用来容纳所有绘图元素
Axes
:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis
:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick
:axis的下属层级,用来处理所有和刻度有关的元素
matplotlib提供了两种最常用的绘图接口,在最后的思考题中请思考两种模式的主要区别
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
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()
plt.show()
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
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()
适用情况分析:oo模式适用于需要绘制多个图的情形,方便后续调整;pyplot模式适合单个或少量图的绘制,减少代码。
提供一个通用的绘图基础模板,任何复杂的图表几乎都可以基于这个模板骨架填充内容而成。初学者刚开始学习时只需要牢记这一模板就足以应对大部分简单图表的绘制,在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。
oo模式:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考后续博文matplotib_5进一步学习,这一步不是必须的,样式也可以在绘制图像时进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考后续博文matplotib_3进一步学习
fig, ax = plt.subplots()
# step4 绘制图像, 这一模块的扩展参考后续博文matplotib_2进一步学习
ax.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考后续博文matplotib_4进一步学习
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
plt.show()
pyplot模式:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考后续博文matplotib_5进一步学习,这一步不是必须的,样式也可以在绘制图像时进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 绘制图像, 这一模块的扩展参考后续博文matplotib_2进一步学习
plt.plot(x, y, label='linear')
# step4 添加标签,文字和图例,这一模块的扩展参考后续博文matplotib_4进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()