如何在Matplotlib图例的两行上方绘制花括号?
在Matplotlib图例旁添加花括号的解决方案
嘿,这个需求其实用Matplotlib自带的BracePatch就能轻松实现!我给你整理了一套可直接复用的方案,结合你已经完成的绘图代码,只需要加几行就能搞定:
步骤1:导入必要的模块
首先要引入专门用于绘制花括号的补丁类:
from matplotlib.patches import BracePatch
步骤2:结合现有代码添加花括号
假设你已经完成了绘图和图例的创建,下面是完整的示例代码(包含模拟的基础绘图部分,你可以替换成自己的代码):
import matplotlib.pyplot as plt from matplotlib.patches import BracePatch # 👇 这里替换成你自己的绘图代码 fig, ax = plt.subplots() line1, = ax.plot([1,2,3], label='第一行图例') line2, = ax.plot([3,2,1], label='第二行图例') # 创建图例(你应该已经有这部分了) legend = ax.legend() # 获取图例中两行文本的对象 text_upper = legend.get_texts()[0] text_lower = legend.get_texts()[1] # 获取文本的边界框,并转换为figure归一化坐标系(避免缩放错位) renderer = fig.canvas.get_renderer() bbox_upper = text_upper.get_window_extent(renderer).transformed(fig.transFigure.inverted()) bbox_lower = text_lower.get_window_extent(renderer).transformed(fig.transFigure.inverted()) # 计算花括号的位置参数 # 花括号的x坐标:比文本左侧再往左偏移一点(可根据美观调整) brace_x = bbox_upper[0, 0] - 0.05 # 花括号的上下y坐标:覆盖两行文本的高度范围 brace_y_top = bbox_upper[1, 1] brace_y_bottom = bbox_lower[0, 0] # 创建花括号补丁 brace = BracePatch( (brace_x, brace_y_bottom), # 下端点坐标 (brace_x, brace_y_top), # 上端点坐标 width=0.02, # 花括号的宽度 color='black', # 花括号颜色 linewidth=1.5 # 线条粗细 ) # 将花括号添加到figure中 fig.add_artist(brace) plt.show()
关键细节调整
- 如果想把花括号放在图例右侧,只需要把
brace_x改成文本右侧的偏移值:brace_x = bbox_lower[1, 0] + 0.05 width参数控制花括号的张开程度,你可以根据图例大小调整数值(比如0.01~0.03之间)- 如果你的图例位置不是默认的,可能需要微调
brace_x的偏移量,让花括号和图例的对齐更自然
内容的提问来源于stack exchange,提问作者Johann




