跳转至

基础知识

信息

pyplotmatplotlib的子模块, 提供了和MATLAB类似的绘图API.

图的类型

  • plot(): 用来绘制线图和散点图
  • scatter(): 用来绘制散点图
  • bar(): 用来绘制垂直条形图和水平条形图
  • hist(): 用来绘制直方图
  • pie(): 用来绘制饼图
  • imshow(): 用来绘制图像
  • subplots(): 用来创建子图

数据源

例子

定义:

xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
plt.plot(xpoints, ypoints)
plt.show()

输出:

Tip

若只提供一个数组, Matplotlib会自动生成默认的x坐标值, 这种自动生成的x坐标值是从0开始的整数序列.

绘图样式

marker参数

可以使用marker参数自定义坐标标记, 可以定义的符号如下:

标记 描述
.
, 像素点
o 实心圆
v 下三角
^ 上三角
< 左三角
> 右三角
1 下丁叉
2 上丁叉
3 左丁叉
4 右丁叉
8 八角形
s 正方形
p 五边形
P 加号 (填充)
* 星号
h 六边形1
H 六边形2
+ 加号
x 乘号x
X 乘号x (填充)
D 菱形
d 瘦菱形
| 竖线
_ 横线
0 (TICKLEFT) 左横线
1 (TICKRIGHT) 右横线
2 (TICKUP) 上竖线
3 (TICKDOWN) 下竖线
4 (CARETLEFT) 左箭头
5 (CARETRIGHT) 右箭头
6 (CARETUP) 上箭头
7 (CARETDOWN) 下箭头
8 (CARETLEFTBASE) 左箭头 (中间点为基准)
9 (CARETRIGHTBASE) 右箭头 (中间点为基准)
10 (CARETUPBASE) 上箭头 (中间点为基准)
11 (CARETDOWNBASE) 下箭头 (中间点为基准)
None, ' ', or ' ' 没有任何标记
'$...$' 渲染指定的字符串,例如'$f$' 以字母f为标记
例子

定义:

ypoints = np.array([1, 2, 3, 4, 5, 6, 7, 4, 6, 3, 6, 3, 6, 2, 7, 2, 6])
plt.plot(ypoints, marker="d")
plt.show()

输出:

linestyle参数

可以使用linestyle参数自定义线的样式.

线类型标记 描述
- 实线
-- 虚线
-. 破折线
: 点划线
`` 不画线
例子

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, linestyle="-.")
plt.show()

输出:

color参数

可以使用color参数自定义线的颜色.

颜色标记 描述
r 红色
g 绿色
b 蓝色
c 青色
m 品红
y 黄色
k 黑色
w 白色
Tip

可以是自定义颜色类型, 如用十六进制表示.

例子

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, color='#8FBC8F')
plt.show()

输出:

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, color='SeaGreen')
plt.show()

输出:

linewidth参数

可以使用linewidth参数定义线的宽度.

例子

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, linewidth="12.5")
plt.show()

输出:

fmt参数

fmt参数定义了基本格式, 如标记, 线条样式和颜色, 其格式如下:

fmt = '<marker><linestyle><color>'

各个子参数详情见:

  • <marker>子参数: 见这里
  • <linestyle>子参数: 见这里
  • <color>子参数: 见这里
例子

定义:

ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, 'o:r')
plt.show()

输出:

ms/mfc/mec参数

ms/mfc/mec用于自定义标记的大小和颜色.

  • ms: markersize, 定义标记的大小
  • mfc: markerfacecolor, 定义标记内部的颜色
  • mec: markeredgecolor, 定义标记边框的颜色
例子

定义:

ypoints = np.array([6, 2, 9, 4])
plt.plot(ypoints, marker='o', ms=20)
plt.show()

输出:

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, marker='o', ms=20, mfc='r')
plt.show()

输出:

定义:

ypoints = np.array([6, 2, 13, 4])
plt.plot(ypoints, marker='o', ms=20, mec='r')
plt.show()

输出:

绘制多条线

可以在多次调用绘图函数或者通过在单个绘图函数中传入多组数据来绘制多条线.

例子

定义:

y1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 2, 13, 10])

plt.plot(y1)
plt.plot(y2)

plt.show()

输出:

定义:

x1 = np.array([0, 1, 2, 3])
y1 = np.array([3, 7, 5, 9])
x2 = np.array([0, 1, 2, 3])
y2 = np.array([6, 2, 13, 10])

plt.plot(x1, y1, x2, y2)

plt.show()

输出:

轴标签和标题

轴标签

可以使用xlabelylabel函数设置x轴和y轴的标签.

例子

定义:

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.xlabel("x - label")
plt.ylabel("x - label")

plt.show()

输出:

标题

可以使用title函数设置标题.

例子

定义:

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.title("Test")
plt.xlabel("x - label")
plt.ylabel("x - label")

plt.show()

输出:

网格线

通过grid函数可以设置图标中的网格线. 格式如下:

matplotlib.pyplot.grid(<b>, <which>, <axis>, <**kwargs>)

参数说明:

  • <b>: 可选, 默认为None, 可以设置布尔值, True为显示网格线, False为不显示网格线
  • <which>: 可选, 可选值有major, minorboth, 表示应用于主网格线还是副网格线

    注意

    若要看见副网格线, 需要开启副刻度: plt.minorticks_on().

    例子

    定义:

    plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
    plt.grid(which='major', linestyle='-', linewidth='0.75', color='black')
    plt.show()
    

    输出:

    定义:

    plt.minorticks_on()
    
    plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
    plt.grid(which='minor', linestyle='-', linewidth='0.75', color='black')
    plt.show()
    

    输出:

    定义:

    plt.minorticks_on()
    
    plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
    plt.grid(which='both', linestyle='-', linewidth='0.75', color='black')
    plt.show()
    

    输出:

  • <axis>: 可选, 设置显示哪个方向的网格线, 可选值有both, xy

  • <**kwargs>: 可选, 设置网格样式

可选参数可以设置颜色, 粗细, 样式:

例子

定义:

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.title("grid() test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)

plt.grid(color="r", linestyle="--", linewidth=0.5)

plt.show()

输出:

绘制多图

可以使用subplotsubplots函数来绘制多个子图.

区别是:

  • subplot(): 用于逐个创建子图, 只存在一个图形对象
  • subplots(): 用于一次性创建整个子图的网格, 并返回一个包含图形对象和子图数组的元组, 多次调用创建多个图形对象

subplot函数

该函数将区域分成<nrows>行和<ncols>列, 从左到右, 从上到下对每个子区域进行编号1...N, 编号可以通过<index>来设置.

例子

定义:

# plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])

plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")

# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

plt.suptitle("subplot test")
plt.show()

输出:

定义:

# plot 1:
x = np.array([0, 6])
y = np.array([0, 100])

plt.subplot(2, 2, 1)
plt.plot(x,y)
plt.title("plot 1")

# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(2, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

# plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])

plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title("plot 3")

# plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])

plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title("plot 4")

plt.suptitle("subplot test")
plt.show()

输出:

subplots函数

该函数会一次性生成多个子图并返回一个图形对象+由子图对象构成的元组.

例子

定义:

# 创建一些测试数据
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

# 创建一个图形对象和一个子图: 图1
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

# 创建一个图形对象和两个子图: 图2
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)

# 创建一个图形对象和四个子图: 图3
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)

plt.show()

输出:

  • 图1

  • 图2

  • 图3


  1. Matplotlib Pyplot | 菜鸟教程. (n.d.). Retrieved June 30, 2024, from https://www.runoob.com/matplotlib/matplotlib-pyplot.html 

  2. Matplotlib 绘图标记 | 菜鸟教程. (n.d.). Retrieved June 30, 2024, from https://www.runoob.com/matplotlib/matplotlib-marker.html 

  3. Matplotlib 绘图线 | 菜鸟教程. (n.d.). Retrieved June 30, 2024, from https://www.runoob.com/matplotlib/matplotlib-line.html 

  4. Matplotlib 网格线 | 菜鸟教程. (n.d.). Retrieved June 30, 2024, from https://www.runoob.com/matplotlib/matplotlib-grid.html 

  5. Matplotlib 绘制多图 | 菜鸟教程. (n.d.). Retrieved June 30, 2024, from https://www.runoob.com/matplotlib/matplotlib-subplots.html