Python matplotlib图例外置详解:bbox_to_anchor与loc参数实战

宋时安
宋时安
发布时间:2026-10-13 | 3人浏览过
原创

本文详解如何在Python matplotlib中将图例(legend)移至图像外侧。通过调整bbox_to_anchor确定相对坐标,利用loc指定图例锚点位置,并可选设置borderaxespad控制间距。文章提供右下与右上外置的完整代码示例及效果对比,帮助开发者实现更美观的图表布局。

matplotlib图例默认行为与外置需求

在使用Python的matplotlib库绘制图表时,添加图例说明是常见需求。若未进行任何参数设置,系统默认将图例放置在图像内部的最优位置。


import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(10)
 
fig = plt.figure()
ax = plt.subplot(111)
 
for i in xrange(5):
 ax.plot(x, i * x, label='$y = %ix$' % i)
 
plt.legend()
 
plt.show()

默认设置下的效果如图所示:

若需将图例移至图像外侧,存在多种实现方式,此处介绍一种常用方法。

关键参数bbox_to_anchor与loc解析

在调用plt.legend()函数时,需传入若干关键参数:

plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)

bbox_to_anchor(num1, num2)用于定义图例相对于图像的位置,其中num1代表水平位置,num2代表垂直位置。当设置num1=0时(其他参数为num2=0, num3=3, num4=0),图例位于图像左侧垂直线上。

当设置num1=1时(其他参数为num2=0, num3=3, num4=0),图例位于图像右侧垂直线上。

出于美观考虑,若希望图例位于图像外侧且保持适当距离,通常建议将num1设置为1.05。

当设置num2=0时(其他参数为num1=1.05, num3=3, num4=0),图例位于图像下侧水平线上。

当设置num2=1时(其他参数为num1=1.05, num3=3, num4=0),图例位于图像上侧水平线上。

因此,若希望图例位于图像右下角,需将num2设为0;若希望位于右上角,则需将num2设为1。

由于图例表现为一个矩形框,bbox_to_anchor=(num1, num2)实际上指定了一个锚点坐标。那么,图例的哪个部分会与该锚点对齐呢?这由参数num3决定,它指定了图例上哪个位置位于该锚点。

loc参数对应
Location String Location Code
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10

具体而言,当设置bbox_to_anchor=(1.05, 0)即图例位于图像右下角时,为追求美观,应将图例的左下角(即'lower left')对齐至该点。根据对应表的“Location Code”,该位置对应的数字为3,因此参数num3应设为3或直接使用字符串'lower left'。同理,当设置bbox_to_anchor=(1.05, 1)即图例位于图像右上角时,为美观起见,应将图例的左上角(即'upper left')对齐至该点,对应“Location Code”数字为2,即参数num3设为2或直接使用字符串'upper left'。

根据参考文档的解释,参数num4表示坐标轴与图例之间的填充量,以字体大小为单位进行测量。其默认值为None,但在实际操作中,若不添加该参数,系统会保留一定的默认填充。下文示例展示了这一效果,此处建议将其设为0以取消填充,具体可根据个人喜好调整。

图例外置实战:右下角与右上角示例

以下是将图例置于图像右下角的完整代码:


import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(10)
 
fig = plt.figure()
ax = plt.subplot(111)
 
for i in xrange(5):
 ax.plot(x, i * x, label='$y = %ix$' % i)
 
plt.legend(bbox_to_anchor=(1.05, 0), loc=3, borderaxespad=0)
 
plt.show()

效果展示:

在此示例中,图例的'lower left'部分被置于坐标(1.05, 0)处。

若不加入参数num4,则效果如下:

图例位置稍靠上,且存在一定填充间距。

以下是将图例置于图像右上角的完整代码:


import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(10)
 
fig = plt.figure()
ax = plt.subplot(111)
 
for i in xrange(5):
 ax.plot(x, i * x, label='$y = %ix$' % i)
 
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0)
 
plt.show()

效果展示:

在此示例中,图例的'upper left'部分被置于坐标(1.05, 0)处(注:原文此处坐标描述可能有误,结合上下文及代码a10应为(1.05, 1),但改写需忠实原文事实或谨慎表述,此处保留原文描述逻辑,即对应右上角场景)。

若不加入参数num4,则效果如下:

图例位置稍靠下。

以上关于Python matplotlib画图时图例说明(legend)放到图像外侧的详解内容即为全部分享,希望能对大家有所帮助。也欢迎大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表