Python matplotlib图例外置详解:bbox_to_anchor与loc参数实战
本文详解如何在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决定,它指定了图例上哪个位置位于该锚点。
| 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)放到图像外侧的详解内容即为全部分享,希望能对大家有所帮助。也欢迎大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









