Matplotlib bbox_to_anchor和loc
在Matplotlib中,我们经常需要调整图例的位置和大小,让图形更具吸引力和可读性。这时我们可以使用 bbox_to_anchor 和 loc 两个参数来完成这个任务。本文将详细介绍这两个参数以及它们的用法。
阅读更多:Matplotlib 教程
什么是bbox_to_anchor和loc
Matplotlib中的 bbox_to_anchor 和 loc 参数用于调整图例的位置和大小。bbox_to_anchor 参数用于确定图例元素的位置相对于绘图区域的位置,loc 参数则用于确定图例元素的相对位置。
bbox_to_anchor 可以指定图例标签的起点位置,例如 (1.0, 0.5) 表示图例的右侧中间。 loc 参数则根据 bbox_to_anchor 指示的位置来确定图例的位置。相对于对应的 bbox_to_anchor 位置,loc 可以在四个角落或中心的九个位置之一。
bbox_to_anchor参数的使用
bbox_to_anchor 参数可以按照以下几种方式使用:
- 使用元组或列表指定固定一组坐标
(x,y):plt.legend(bbox_to_anchor=(0.5, 0.5)) - 使用二元组的归一化的浮点数指定固定一组坐标
(x, y):plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, ncol=2, mode="expand", borderaxespad=0.)在此示例中,
(0., 1.02, 1., .102)表示矩形的完整的(x0, y0, width, height),其中(0, 1)表示左上角,(1, 0)表示右下角。参数loc确定相对于bbox_to_anchor坐标的位置。ncol=2表示一行将有两个图例项;mode="expand"意味着图例可能会被拉伸以适应整个bbox_to_anchor矩形;borderaxespad=0.使图例紧贴在bbox_to_anchor矩形的边缘上。 -
使用变量参数(例如
*args和**kwargs)指定坐标:plt.legend(bbox_to_anchor=(0.5, 0.5), *args, **kwargs)
loc参数的使用
loc 参数有多种选项,可以使用整数或字符串指定。下面是可用的选项列表:
| Loc字符串 | Loc数值 | 说明 |
|---|---|---|
'best' |
0 | Matplotlib 试图猜测最好的位置 |
'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 | 图表的中心 |
例如,我们想把图例放在右上角,可以使用以下代码:
plt.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')
在这个示例中, (1.05, 1.0) 意味着将图例置于绘图区域的外部。loc='upperleft' 表示将图例放在对应区域的左上角。
另外,loc 也可以指定为一个二元组 (x,y)(如使用 bbox_to_anchor 时),指定图例相对于 bbox_to_anchor 的位置。例如:
plt.legend(bbox_to_anchor=(0.5, 0.5), loc=(0.75, 0.75))
这里, (0.5, 0.5) 定义了 bbox_to_anchor 的位置,(0.75, 0.75) 像素数的二元组,表示将图例相对于 bbox_to_anchor 向右上方移动三个四分之一的 bbox_to_anchor 的宽度和高度。
实际应用
在实际的数据可视化中, bbox_to_anchor 和 loc 是非常有用的参数。下面就是一些例子:
单图例
以下示例显示如何在右上角放置一个图例:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [1, 2, 3]
plt.plot(x, y, label='data1')
plt.legend(loc='upper right')
plt.show()
多图例
以下示例显示如何在同一个图表中放置两个图例:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [1, 2, 3]
y2 = [3, 2, 1]
plt.plot(x, y1, label='data1')
plt.plot(x, y2, label='data2')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.legend(loc='lower left')
plt.show()
可视化矩阵
以下示例使用 subplots 函数在同一个大图中显示矩阵和图例:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
heatmap = ax.pcolor([[1, 2], [3, 4]])
cbar = plt.colorbar(heatmap)
cbar.ax.set_yticklabels(['< -1', '0', '> 1'])
ax.set_xticks([0, 1])
ax.set_yticks([0, 1])
ax.set_xticklabels(['A', 'B'])
ax.set_yticklabels(['X', 'Y'])
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()
这个示例中, bbox_to_anchor 参数用于控制图例的位置。
总结
在Matplotlib中, bbox_to_anchor 和 loc 是控制图例位置和大小的有用参数。仅凭这两个参数,我们就可以轻松地实现以下任务:
- 在某些位置放置一个图例
- 放置多个图例
- 控制图例的大小和位置
这些任务可以帮助我们更好地展示数据和传达已经分析的见解。
极客笔记