You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中添加超出色条范围的标注线并添加标签

在Matplotlib色条上添加超出边界的标注线

要实现色条上超出自身边界的水平线并添加标签,核心是突破色条轴的裁剪限制或利用坐标转换在图层面绘制,以下是两种可行方案:

方案1:关闭色条轴的裁剪(简单直接)

色条默认会裁剪轴内超出边界的图形,关闭裁剪后即可让线条延伸出去:

import matplotlib.pyplot as plt
import numpy as np

# 生成测试热力图
data = np.random.rand(10, 10)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='viridis')

# 创建色条
cbar = fig.colorbar(im)
target_value = 0.5  # 要标注的数值

# 关闭色条轴的裁剪,允许图形超出边界
cbar.ax.set_clip_on(False)

# 在色条轴上画水平线,xmin/xmax超出色条的默认x范围(0-1)
cbar.ax.hlines(y=target_value, xmin=-0.3, xmax=1.3, colors='red', linewidth=2)

# 添加标签到色条右侧
cbar.ax.text(1.05, target_value, f'{target_value:.1f}', 
             ha='left', va='center', color='red', fontweight='bold')

plt.show()

方案2:在图层面绘制线条(灵活控制延伸范围)

通过获取色条的位置坐标,在整个画布层面绘制线条,可让线条延伸到任意位置:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10, 10)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='viridis')
cbar = fig.colorbar(im)

target_value = 0.5
# 将目标数值转换为色条轴的归一化y坐标
y_norm = cbar.norm(target_value)

# 获取色条在画布上的边界框(归一化坐标)
fig.canvas.draw()  # 确保画布已渲染,获取准确位置
cbar_bbox = cbar.ax.get_window_extent().transformed(fig.transFigure.inverted())

# 计算线条在画布上的y位置
y_pos = cbar_bbox.y0 + y_norm * (cbar_bbox.y1 - cbar_bbox.y0)

# 在整个画布上画水平线,x范围覆盖整个图宽
plt.hlines(y=y_pos, xmin=0, xmax=1, colors='red', linewidth=2, transform=fig.transFigure)

# 添加标签到色条右侧
label_ax = fig.add_axes([cbar_bbox.x1 + 0.01, y_pos - 0.01, 0.05, 0.02])
label_ax.axis('off')
label_ax.text(0.5, 0.5, f'{target_value:.1f}', ha='center', va='center', color='red', fontweight='bold')

plt.show()

关键说明

  • 方案1适合只需要小幅超出色条边界的场景,代码更简洁
  • 方案2可让线条延伸到画布任意位置,适合需要跨区域标注的需求
  • 标签位置可通过调整text或新增轴的坐标参数灵活控制

内容的提问来源于stack exchange,提问作者Eduard Tetzlaff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:49