plot() 函数是 matplotlib 的 pyplot 模块中最常用的绘图函数。其调用格式如下:
plot([x], y, [fmt], *, data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
如下所示是 plot() 的基本用法:
plot(x, y) # 使用默认线型和颜色,基于 x 和 y 所提供坐标数据绘图
plot(x, y, 'bo') # 使用蓝色实心点,基于 x 和 y 所提供坐标数据绘图
plot(y) # 使用 x 作为索引数组 0..N-1 绘制 y
plot(y, 'r+') # 使用 x 作为索引数组 0..N-1 绘制 y,同时线条红色加粗
除了上面的方法,还可以将 Line2D 特性用作关键字参数,从而对绘图外观进行更多控制。线属性和 fmt 可以混合。以下两个调用可产生相同的结果:
# 使用fmt参数设置样式:绿色、点标记为‘O’、点之间连线为虚线;线宽为 2,点标记大小为 12
plot(x, y, 'go--', linewidth=2, markersize=12)
# 使用Line2D特性设置样式:绿色、点标记为‘O’、点之间连线为虚线;线宽为 2,点标记大小为 12
plot(x, y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)
如下代码,简单而原始的绘图方式,与之前文章介绍的不同,这里没有创建画布(Figure)和坐标系(Axes),这是因为 plot() 函数在执行时可以默认创建一张画布和一个坐标系。这种方式很简单,但也牺牲了一些特性,比如无法实现一张画布上绘制多图。
import matplotlib.pyplot as plt
# 准备绘图数据
data = [1, 2, 3, 4]
# 绘图并展示
plt.plot(data)
plt.show()
在上面的例子中,plt.plot(data)指定了所绘图形的纵坐标 [1, 2, 3, 4],横坐标未给出,则默认为[0, ···, N-1]。执行结果:
如下代码,使用 Line2D 特性,设置绘图样式:绿色、点标记为实心点、点之间连线为虚线。
import matplotlib.pyplot as plt
# step1:准备画图的数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [21, 27, 29, 32, 29, 28, 35, 39, 49]
# step2:手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# step3:在画布上添加一个坐标系,标定绘图位置
axes1 = figure.add_subplot(1, 1, 1)
# step4:画图,设置线条颜色、线型、点标记符
axes1.plot(x, y, color='green', linestyle='dashed', marker='o')
# step5:展示
plt.show()
上面代码执行结果:
在实际应用中,常常遇到需要在一个坐标系中绘制多条图线的情况。相较于绘制一条图线,绘制多条图线并不复杂,如下代码示例:1.为了绘制两条图线,我们准备了两组数据;2.使用 fmt 参数设置图线样式,'go–'表示绿色、实心点、虚线,'r*-'表示红色、星型点、实线。
import matplotlib.pyplot as plt
# step1:准备两组画图数据
x1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y1 = [21, 27, 29, 32, 29, 28, 35, 39, 49]
x2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [11, 13, 17, 12, 16, 8, 6, 19, 20]
# step2:手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# step3:在画布上添加一个坐标系,标定绘图位置
axes1 = figure.add_subplot(1, 1, 1)
# step4:画图,设置线条颜色、线型、点标记符
axes1.plot(x1, y1, 'go--', x2, y2, 'r*-')
# step5:展示
plt.show()
上面代码执行结果:
一张完整的图片,通常需要具备:标题(title)、x轴标签(x-label)、y轴标签(y-label)、文本(text)、图例(legend)、背景网格(grid)等属性,设置方式如下例子所示:
# 设置基本信息
axes1.set_xlabel('time(s)') # x轴标签
axes1.set_ylabel('velocity(m/s)') # y轴标签
axes1.set_title("title:example") # 图标标题
axes1.text(6, 37, 'vt-demo') # 文本,(6,37)设置文本在图片中的坐标
axes1.legend(['vt']) # 图例
axes1.grid(linestyle='--', linewidth=1) # 背景网格
axes1.annotate('local max', xy=(4, 32), xytext=(4.5, 34),
arrowprops=dict(facecolor='black', shrink=0.05)) # 注解
为了直观的呈现效果,在此给出一个完整的示例:
import matplotlib.pyplot as plt
# step1:准备画图的数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [21, 27, 29, 32, 29, 28, 35, 39, 49]
# step2:手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# step3:在画布上添加一个坐标系,标定绘图位置
axes1 = figure.add_subplot(1, 1, 1)
# step4:图片基本设置
# 设置线条颜色、线型、点型
axes1.plot(x, y, 'ro--')
# 设置基本信息
axes1.set_xlabel('time(s)') # x轴标签
axes1.set_ylabel('velocity(m/s)') # y轴标签
axes1.set_title("title:example") # 标题
axes1.text(6, 37, 'vt-demo') # 文本
axes1.legend(['vt']) # 图例
axes1.grid(linestyle='--', linewidth=1) # 背景网格
axes1.annotate('local max', xy=(4, 32), xytext=(4.5, 34),
arrowprops=dict(facecolor='black', shrink=0.05)) # 注解
# step5:展示
plt.show()
上面代码执行结果:
即绘图坐标点的样式,如前面介绍的:’*’ 代表星型,'o’代表圆形,'v’代表三角形。更多样式如下列表:
字符 | 描述 |
---|---|
‘-’ | 实线 |
‘–’ | 虚线 |
‘-.’ | 点线 |
‘:’ | 点虚线 |
‘.’ | 点 |
‘,’ | 像素 |
‘o’ | 圆形 |
‘v’ | 朝下的三角形 |
‘^’ | 朝上的三角形 |
‘<’ | 朝左的三角形 |
‘>’ | 朝右的三角形 |
‘1’ | 朝下的三角旗 |
‘2’ | 朝上的三角旗 |
‘3’ | 朝左的三角旗 |
‘4’ | 朝右的三角旗 |
‘s’ | 正方形 |
‘p’ | 五角形 |
‘*’ | 星型 |
‘h’ | 1号六角形 |
‘H’ | 2号六角形 |
‘+’ | +号标记 |
‘x’ | x号标记 |
‘D’ | 钻石形 |
‘d’ | 小版钻石形 |
‘I’ | 垂直线形 |
‘_’ | 水平线行 |
设置示例:
# 设置方式1: 使用关键字设置
plot(x, y, marker='o')
# 设置方式2: 使用fmt字符串设置
plot(x, y, 'o')
即绘图线条的样式,共有四种:’-’ 达标实线;’–’ 代表虚线;’-.’ 代表点划线;’:’ 代表圆点虚线。设置示例:
# 设置方式1: 使用关键字设置
plot(x, y, linestyle='--')
# 设置方式2: 使用fmt字符串设置
plot(x, y, '--')
即设置绘图点线颜色,共其中,如下所示:
字符 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
设置示例:
# 设置方式1: 使用关键字设置
plot(x, y, color='red')
# 设置方式2: 使用fmt字符串设置
plot(x, y, 'r')