You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动