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

如何在Matplotlib绘图中使用等高宽异的右花括号?

实现Matplotlib中高度不同但宽度一致的右花括号

你遇到的问题确实很常见——直接调整字号会让花括号的宽高同时缩放,没法单独控制高度。其实不用额外工具,Matplotlib本身就有两种简单的方法实现需求,我给你详细说说:

方法一:用PathPatch绘制自定义花括号

这种方法最灵活,能完全自定义花括号的形状、高度和宽度,保证宽度一致的同时调整高度。核心是用matplotlib.path.Path定义花括号的路径,再通过PathPatch添加到图中。

示例代码:

import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch
from matplotlib.path import Path

def draw_brace(ax, x, y_low, y_high, width=0.02):
    # 定义右花括号的路径点
    points = [
        (x, y_low),
        (x + width, y_low),
        (x + width, y_low + 0.1*(y_high - y_low)),
        (x, y_low + 0.2*(y_high - y_low)),
        (x + width, y_low + 0.3*(y_high - y_low)),
        (x + width, y_high - 0.3*(y_high - y_low)),
        (x, y_high - 0.2*(y_high - y_low)),
        (x + width, y_high - 0.1*(y_high - y_low)),
        (x + width, y_high),
        (x, y_high),
    ]
    # 路径指令:MOVETO, LINETO, LINETO... 最后闭合路径
    codes = [Path.MOVETO] + [Path.LINETO]*(len(points)-2) + [Path.CLOSEPOLY]
    path = Path(points, codes)
    patch = PathPatch(path, facecolor='none', edgecolor='black')
    ax.add_patch(patch)

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

# 绘制两个宽度相同、高度不同的右花括号
draw_brace(ax, 0.2, 0.1, 0.3)  # 矮括号
draw_brace(ax, 0.4, 0.1, 0.5)  # 高括号

plt.xlim(0, 0.6)
plt.ylim(0, 0.6)
plt.show()

解释:你可以通过调整y_low和y_high控制花括号的高度,width参数固定为同一个值就能保证所有花括号宽度一致。如果觉得形状不够美观,还可以修改points里的坐标来调整花括号的弯曲程度。

方法二:用文本变换单独缩放高度

这种方法更快捷,直接利用Matplotlib的变换系统,对花括号文本只在y轴方向缩放,x轴保持原尺寸,这样就能实现高度变化但宽度不变的效果。

示例代码:

import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

# 基础字号(控制宽度)
base_fontsize = 20
# 第一个花括号:高度为原尺寸
ax.text(0.2, 0.2, '}', fontsize=base_fontsize)

# 第二个花括号:y轴方向缩放2倍,x轴不变
trans = ax.transData + Affine2D().scale(1, 2)
ax.text(0.4, 0.2, '}', fontsize=base_fontsize, transform=trans)

plt.show()

解释:Affine2D().scale(1, 2)表示x轴缩放1倍(不变),y轴缩放2倍。需要注意的是,缩放后的文本位置可能需要微调,你可以根据实际需求调整text的y坐标,保证位置符合预期。

这两种方法都不需要依赖外部工具,完全在Matplotlib内部实现,你可以根据自己的需求选择——如果需要精确控制形状选方法一,追求简单快捷选方法二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:04