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

如何用Matplotlib实现Excel图表风格的顶部标注样式

Matplotlib 实现Excel风格顶部标注方案

以下是针对需求的三种常见Excel风格顶部标注的代码实现,直接基于Matplotlib的文本和绘图API完成:

1. 自定义间距的[--BL--]式标注

通过手动绘制括号和分隔线,完全控制符号间距:

import matplotlib.pyplot as plt

def add_custom_bracket_label(ax, text, x=0.5, y=1.1, bracket_pad=0.02, line_len=0.03):
    # 使用轴的归一化坐标(0-1范围)定位
    ax.text(x, y, text, ha='center', va='center', fontsize=12)
    # 绘制括号内侧短横线
    ax.plot([x - bracket_pad - line_len, x - bracket_pad], [y, y], color='black')
    ax.plot([x + bracket_pad, x + bracket_pad + line_len], [y, y], color='black')
    # 添加左右括号
    ax.text(x - bracket_pad - line_len - 0.01, y, '[', ha='right', va='center', fontsize=12)
    ax.text(x + bracket_pad + line_len + 0.01, y, ']', ha='left', va='center', fontsize=12)

# 测试示例
fig, ax = plt.subplots()
ax.plot([1,2,3], [4,5,6])
add_custom_bracket_label(ax, '--BL--', bracket_pad=0.03, line_len=0.04)
plt.subplots_adjust(top=0.85) # 预留顶部空间避免遮挡
plt.show()

参数说明:

  • bracket_pad:括号与文本的间距
  • line_len:括号内侧短横线的长度
  • x/y:标注的位置(归一化坐标)

2. 带下划线的顶部文本标注

提供两种实现方式,可按需选择:

方法1:基于文本边界绘制下划线

def add_underline_label(ax, text, x=0.5, y=1.1, underline_offset=0.02):
    # 添加文本并获取其像素边界
    txt = ax.text(x, y, text, ha='center', va='center', fontsize=12)
    bbox = txt.get_window_extent()
    # 绘制与文本等长的下划线
    ax.plot([bbox.x0, bbox.x1], [bbox.y0 - underline_offset, bbox.y0 - underline_offset], color='black')

# 测试
fig, ax = plt.subplots()
ax.plot([1,2,3], [4,5,6])
add_underline_label(ax, '带下划线的标注')
plt.subplots_adjust(top=0.85)
plt.show()

方法2:用bbox参数实现下划线

def add_underline_bbox_label(ax, text, x=0.5, y=1.1):
    bbox_props = dict(boxstyle='square,pad=0.3', facecolor='none', edgecolor='none',
                      linewidth=0, underline=True, underline_offset=5)
    ax.text(x, y, text, ha='center', va='center', fontsize=12, bbox=bbox_props)

# 测试
fig, ax = plt.subplots()
ax.plot([1,2,3], [4,5,6])
add_underline_bbox_label(ax, 'BBox下划线标注')
plt.subplots_adjust(top=0.85)
plt.show()

3. 带底部边框栏的文本标注

通过绘制矩形背景框,实现类似Excel的底部边框栏效果:

def add_bottom_border_label(ax, text, x=0.5, y=1.1, bar_height=0.04):
    # 绘制仅显示底部边框的矩形
    ax.add_patch(plt.Rectangle((x-0.1, y-bar_height), 0.2, bar_height, 
                               fill=False, edgecolor='black', linewidth=1, clip_on=False))
    # 在矩形内添加文本
    ax.text(x, y - bar_height/2, text, ha='center', va='center', fontsize=12)

# 测试
fig, ax = plt.subplots()
ax.plot([1,2,3], [4,5,6])
add_bottom_border_label(ax, '底部边框栏标注')
plt.subplots_adjust(top=0.85)
plt.show()

可通过调整矩形的宽度(示例中0.2)、高度(bar_height)参数,适配不同长度的文本。

内容的提问来源于stack exchange,提问作者Francesco Marzolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:26