双轴显示
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi,50)
y = np.sin(x)
plt.plot(x,y,color = 'blue')
# 设置 y 轴的刻度为从 -1 到 1 的 11 个等间距位置
_ = plt.yticks(np.linspace(-1,1,11),color = 'blue')
ax = plt.gca()# 获取当前视图
# twinx 请问是否有twiny呢?
ax2 = ax.twinx() # 共享X轴,对应着两个Y轴
# 其中一个视图,纵坐标范围:-1~1.0
# 另一个视图,范围 0 ~ 25 刻度会自适应
y2 = np.exp(x)
plt.plot(x,y2,color = 'red') # 默认向ax2这个子视图中绘制
_ = plt.yticks(np.arange(0,26,5),color = 'red')
文本、注释、箭头
文本
# 字体属性
font = {'fontsize': 20,
'family': 'SimHei',
'color': 'red',
'weight': 'bold'} # 字体加粗
x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)
# 设置图形大小;宽度为 9 英寸,高度为 6 英寸
plt.figure(figsize=(9,6))
plt.plot(x, y, 'g')
# 视图的标题,小标题
plt.title('指数级衰减',fontdict=font,pad = 20)
# figure的大标题,大标题
plt.suptitle('指数衰减',y = 1.05,fontdict = font,fontsize = 30)
# 坐标位置 (2, 0.65) 处添加一个文本注释
plt.text(x = 2, y = 0.65, # 横纵坐标位置
s = r'$\cos(2 \pi x) \exp(-x)$',fontdict=font) # 文本内容
# 在(2, -0.4) 添加Matplotlib 注释
plt.text(x = 2,y = -0.4,s = 'Matplotlib')
# 设置x,y抽标签
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.show()
箭头
plt.arrow() 绘制箭头函数
- x, y: 箭头的起始点的 x 和 y 坐标。
- dx, dy: 箭头的长度和方向,即箭头在 x 和 y 方向上的增量。
- head_width: 箭头头部的宽度。
- head_length: 箭头头部的长度。
- fc: 箭头填充的颜色。
- ec: 箭头边缘的颜色。
- lw: 箭头的线宽。
- length_includes_head: 确定整个箭头的长度是否包括头部长度。
- shape: 箭头的形状,可以是 ‘full’, ‘left’, ‘right’。
- overhang: 控制箭头头部的悬挂量。
- zorder: 控制绘图顺序的参数,值越大表示绘制在顶层。
- alpha: 控制箭头的透明度。
- linestyle: 箭头的线型。
- facecolor: 箭头的填充颜色。
- edgecolor: 箭头的边缘颜色。
- clip_on: 确定箭头是否被裁剪。
- visible: 控制箭头是否可见。
# 随机生成数字 10行2列(x,y)
loc = np.random.randint(0,10,size = (10,2))
loc
"""
array([[4, 3],
[8, 9],
[5, 5],
[5, 7],
[4, 1],
[0, 5],
[7, 0],
[0, 0],
[6, 1],
[8, 2]])
"""
plt.figure(figsize=(8, 8))
# 获取所有行,索引0---->横坐标
# 索引1---->纵坐标
# 'gh' 指定点为绿色,样式为六边形 (hexagon); ms=20:点的大小为 20
plt.plot(loc[:,0], loc[:,1], 'gh', ms=20)
# 线上网格
plt.grid(True)
# 路径
way = np.arange(10) # 0、1、2…、9索引
print(way) # [0 1 2 3 4 5 6 7 8 9]
np.random.shuffle(way) # 洗牌,打乱顺序
print(way) # [3 1 9 0 5 4 2 8 6 7]
# 10个点,连9条线
for i in range(0, 9): # for循环遍历,少一个,最后一个特殊
start = loc[way[i]] # 起点
end = loc[way[i+1]] # 终点
plt.arrow(x = start[0], y = start[1], # 箭头起点
dx = end[0]-start[0], dy = end[1]-start[1], # start -> end坐标移动位置
head_width=0.2, lw=2,# 箭头长度和线宽
length_includes_head = True) # 长度计算包含箭头
plt.text(start[0],start[1],s = i,fontsize = 18,color = 'red') # 文本
if i == len(way) - 2: # 最后一个点
plt.text(end[0],end[1],s = i + 1,fontsize = 18,color = 'red')
start = loc[way[-1]] # 最后一个点
end = loc[way[0]] # 起点,对应着0点
# 结尾最后一个箭头显示红色
plt.arrow(x = start[0], y = start[1], # 箭头起点
dx = end[0]-start[0], dy = end[1]-start[1], # 坐标移动位置
head_width=0.2, lw=2,# 箭头长度和线宽
length_includes_head = True,color = 'red') # 长度计算包含箭头箭尾
注释(箭头 + 文本)
ax.annotate() 添加注释
常用参数的含义:
- text: 注释文本内容。
- xy: 要注释的点的位置,格式为 (x, y)。
- xytext: 注释文本的位置,格式为 (x, y)。如果未指定,则默认为 xy。
- arrowprops: 箭头的属性,如箭头的样式、颜色等。
- fontsize: 注释文本的字体大小。
fig, ax = plt.subplots()
x = np.arange(0.0, 5.0, 0.01)
y = np.cos(2*np.pi*x)
line, = ax.plot(x,y,lw=2)
# 设置字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['font.size'] = 20
# 注释
ax.annotate('最大值', # 文本内容
xy=(2, 1), # 箭头指向位置
xytext=(3, 1.5), # 文本位置
arrowprops=dict(facecolor='black', shrink=0.05)) # 箭头模样
ax.annotate('最小值',
xy = (2.5,-1),
xytext = (4,-1.8),
arrowprops = dict(facecolor = 'green',
width = 2, # 箭头宽度
headwidth = 10,# 箭头头部宽度
headlength = 10, # 箭头头部长度
shrink = 0.05)) # 箭头两端收缩的百分比(占总长)
ax.annotate('median',
xy = (2.25,0),
xytext = (0.5,-1.8),
arrowprops = dict(arrowstyle = '-|>'), # 箭头样式
fontsize = 20)
ax.set_ylim(-2, 2) # y轴范围调宽