写在最前面:

既然将这篇文章放到了百宝箱,就说明这是一篇重在记录使用方法的文章。在这一篇文章中我会记录一个通用的绘图模板,然后分层次对模板的各个部分进行扩展。同时以后会附加上一些实践项目的例子
本篇文章参考:https://datawhalechina.github.io/fantastic-matplotlib
(仅用于自己学习整理)

Matplotlib初相识

Figure的组成

Figure是一个窗体,我们是在这个窗体上进行画图的。

通过一张figure解剖图,我们可以看到一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container):

  • Figure:顶层级,用来容纳所有绘图元素
  • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
  • Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
  • Tick:axis的下属层级,用来处理所有和刻度有关的元素

matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合

两种绘图接口

显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)

看一个代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

x = np.linspace(0, 2, 100) # 在[0,2]之间采样100个。

fig, ax = plt.subplots() # 创建fig与ax

# 设置ax的数据点
ax.plot(x, x, label="linear")
ax.plot(x, x**2, label="quadratic")
ax.plot(x, x**3, label='cubic')

# 设置ax的轴名
ax.set_xlabel("x_label")
ax.set_ylabel("y_label")
ax.set_title("Simple Plot")

# 显示标签
ax.legend()
plt.show()

结果:


依赖pyplot自动创建figure和axes,并绘图

看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

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()
plt.show()

结果:

重点:一个通用的绘图模板

初学者刚开始学习时只需要牢记这一模板就足以应对大部分简单图表的绘制,在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。

  1. step1:准备数据
1
2
x = np.linspace(0, 2, 100)
y = x**2
  1. step2:设置绘图样式

这一模块的扩展参考第五小节进一步学习,这一步不是必须的,样式也可以在绘制图像时进行设置。

1
mpl.rc('lines', linewidth=4, linestyle='-.')
  1. step3:定义布局

具体参见第三小节

1
fig, ax = plt.subplots()  
  1. step4:绘制图像

参见第二小节

1
ax.plot(x, y, label='linear')  
  1. step5:添加标签、文字、图例

参见第四小节

1
2
3
4
ax.set_xlabel('x label') 
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend() ;

最后plt.show()即可完成绘图。

艺术画笔见乾坤

本小节主要介绍如何进行图像的绘制。这部分内容是本篇文章的核心。