机器学习常用包matplotlib篇(五)图像标注
在绘制复杂图像时,图像标注能帮助阅读对象更好理解图像含义。图像标注是在画面上添加文字注释、指示箭头、图框等各类标注元素。
前言
在绘制复杂图像时,图像标注能帮助阅读对象更好理解图像含义。图像标注是在画面上添加文字注释、指示箭头、图框等各类标注元素。
一、文字标注(plt.text())
1. 函数
plt.text(x, y, s, fontsize=12, horizontalalignment='left', ...)
-
作用:在指定坐标位置添加文字注释。
-
参数:
-
x, y:标注的坐标位置(基于数据坐标系)。 -
s:标注的文本内容。 -
fontsize:字体大小。 -
horizontalalignment:水平对齐方式('left','center','right')。 -
其他参数:
color,rotation等(与文本样式相关)。
-
2. 示例:柱形图数值标注
fig, axes = plt.subplots()
x_bar = [10, 20, 30, 40, 50]
y_bar = [0.5, 0.6, 0.3, 0.4, 0.8]
bars = axes.bar(x_bar, y_bar, color='blue', width=2)
for i, rect in enumerate(bars):
x_center = rect.get_x() + rect.get_width() / 2 # 柱子中心横坐标
y_text = rect.get_height() + 0.01 # 高度 + 偏移量
plt.text(x_center, y_text, f'{y_bar[i]:.1f}',
ha='center', va='bottom') # 居中对齐
-
关键点:
-
通过
rect.get_x() + rect.get_width()/2获取柱子中心,使文本居中。 -
va='bottom'确保文本底部对齐柱子顶部,避免遮挡。
-
二、箭头标注(plt.annotate())
1. 函数
plt.annotate(text, xy, xytext, arrowprops=dict(...), ...)
-
作用:添加带箭头的复杂标注。
-
参数:
-
text:标注文本。 -
xy:箭头指向的目标位置(数据坐标系)。 -
xytext:文本的起始位置(数据坐标系)。 -
arrowprops:箭头属性字典,常用参数:-
facecolor:箭头颜色。 -
width:箭尾宽度。 -
headwidth:箭头宽度。 -
arrowstyle:箭头样式(如'->','fancy')。
-
-
2. 示例:标注柱形图最小值
plt.annotate('Min',
xy=(30, 0.3), # 箭头指向柱子顶部中心
xytext=(35, 0.5), # 文本起始位置
arrowprops=dict(facecolor='black', arrowstyle='->', linewidth=1),
ha='center', va='center')

-
关键点:
-
xy应指向目标点(如柱子顶部中心),需结合数据坐标计算。 -
使用
arrowstyle可自定义箭头形状(如'->'为简单箭头,'fancy'为复杂样式)。
-
三、注意事项
-
坐标系统:
-
默认使用数据坐标系,可通过
transform参数切换为其他坐标系(如axes像素坐标系)。
-
-
文本位置优化:
-
动态计算标注位置(如基于柱子高度自动调整偏移量)。
-
-
样式统一性:
-
保持标注颜色、字体与图表风格一致。
-
-
箭头指向准确性:
-
确保
xy坐标精确指向目标位置,避免视觉误导。
-
四、完整代码示例
import matplotlib.pyplot as plt
# 数据准备
x_bar = [10, 20, 30, 40, 50]
y_bar = [0.5, 0.6, 0.3, 0.4, 0.8]
# 绘制柱形图
fig, ax = plt.subplots()
bars = ax.bar(x_bar, y_bar, color='skyblue', width=2)
# 添加文字标注
for rect in bars:
height = rect.get_height()
x_center = rect.get_x() + rect.get_width() / 2
ax.text(x_center, height + 0.01, f'{height:.1f}',
ha='center', va='bottom', fontsize=10)
# 添加箭头标注
ax.annotate('Min Value',
xy=(30, 0.3),
xytext=(40, 0.6),
arrowprops=dict(facecolor='red', arrowstyle='->', linewidth=1.5),
fontsize=12, color='darkred')
plt.show()
通过结合 text() 和 annotate(),可清晰标注图表关键信息,提升可读性。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)