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

如何将Matplotlib图例默认置于绘图区域外?

如何将Matplotlib图例默认置于绘图区域外

虽然Matplotlib官方配置参数里没有直接暴露bbox_to_anchor的默认设置项,但有几种实用方案可以实现这个需求,下面我来详细说明:

方法1:自定义图例函数替换默认实现

这是兼容性最好的方案,无论你的Matplotlib版本新旧都能使用。我们可以封装一个带默认参数的图例函数,替换掉原生的plt.legend:

import matplotlib.pyplot as plt

def default_legend(*args, **kwargs):
    # 默认将图例放在绘图区域右上角外侧
    kwargs.setdefault('bbox_to_anchor', (1.05, 1))
    kwargs.setdefault('loc', 'upper left')
    kwargs.setdefault('borderaxespad', 0)  # 消除图例与坐标轴的间距
    return plt.gca().legend(*args, **kwargs)

# 替换默认的legend函数
plt.legend = default_legend

# 测试效果
plt.plot([1, 2, 3], label='示例曲线1')
plt.plot([3, 2, 1], label='示例曲线2')
plt.legend()
plt.tight_layout()  # 自动调整布局,避免图例被裁剪
plt.show()

之后每次调用plt.legend()都会自动应用这些默认参数,你也可以在调用时传入新参数覆盖默认值。

方法2:利用Matplotlib 3.7+的legend.extra_kwargs配置

如果你使用的是Matplotlib 3.7或更高版本,官方新增了legend.extra_kwargs这个rc参数,可直接用来设置图例的默认额外参数,包括bbox_to_anchor:

import matplotlib.pyplot as plt

# 全局配置默认参数
plt.rcParams['legend.loc'] = 'upper left'
plt.rcParams['legend.extra_kwargs'] = {
    'bbox_to_anchor': (1.05, 1),
    'borderaxespad': 0
}

# 测试
plt.plot([1, 2, 3], label='示例曲线')
plt.legend()
plt.subplots_adjust(right=0.8)  # 手动调整右侧边距,给图例留出空间
plt.show()

这种方法更简洁,无需自定义函数,直接通过rc参数完成全局配置。

方法3:创建自定义样式文件(持久化配置)

如果希望每次启动Python都自动应用这个默认设置,可以创建自定义Matplotlib样式文件:

  1. 在用户目录下创建.config/matplotlib/stylelib文件夹(不存在则新建)
  2. 在该文件夹中新建outside_legend.mplstyle文件,写入以下内容:
legend.loc: upper left
legend.extra_kwargs: {'bbox_to_anchor': (1.05, 1), 'borderaxespad': 0}
  1. 后续使用Matplotlib时,只需加载该样式:
import matplotlib.pyplot as plt
plt.style.use('outside_legend')

# 正常绘图即可
plt.plot([1,2,3], label='曲线')
plt.legend()
plt.show()

小提示

设置图例在绘图区域外后,记得调整布局避免图例被裁剪:

  • 使用plt.tight_layout()自动调整布局
  • 或者用plt.subplots_adjust(left/right/top/bottom=...)手动设置边距

内容的提问来源于stack exchange,提问作者E.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:30:06