如何用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
相关产品推荐
相关产品推荐

