📜  如何在 Matplotlib 中将图例放置在绘图之外?(1)

📅  最后修改于: 2023-12-03 15:24:17.197000             🧑  作者: Mango

如何在 Matplotlib 中将图例放置在绘图之外?

Matplotlib 是一个 Python 的可视化库,它可以方便地创建各种类型的数据图表。在一张图表中添加图例(Legend)是一个非常普遍的需求,图例可以使绘图更加易读、清晰。通常情况下,Matplotlib 将图例放置在绘图内部,但有时我们也需要将图例放置在绘图之外,以便更好地展示数据。

在 Matplotlib 中将图例放置在绘图内部

在 Matplotlib 中,你可以使用 legend() 函数来添加图例,该函数将返回一个 Legend 对象,该对象包含有关图例的信息。默认情况下,Matplotlib 将使用最佳位置来放置图例,通常是在绘图内部的某个角落中。例如:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [10, 20, 30, 40]

plt.plot(x, y, label='Data')
plt.legend()

plt.show()

在上面的代码中,我们使用 plot() 函数绘制了一条直线,并使用 label 参数指定了图例的标签。然后,我们调用 legend() 函数将图例添加到绘图中。

在 Matplotlib 中将图例放置在绘图之外

有时候,将图例放置在绘图内部并不能满足需求。例如,如果图形非常小或者嵌入在较小的容器(如子图)中,则可能无法适合图例。在这种情况下,我们需要将图例放置在绘图之外。

Matplotlib 中有几种方法可以实现这一目的。其中一种方法是将图例放置在绘图下面(或旁边),使用 legend() 函数的 bbox_to_anchor 参数来控制图例的位置。例如:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [10, 20, 30, 40]

plt.plot(x, y, label='Data')

plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.1), ncol=2)

plt.show()

在上面的代码中,我们使用 loc 参数指定图例的位置(上中),并使用 bbox_to_anchor 参数将图例放置在绘图下面。bbox_to_anchor 是一个元组,它包含两个值:图例的横向位置和纵向位置,单位是绘图中的图形坐标。ncol 参数用于指定图例的列数。

还有一种方法是将图例分别放置在较小的轴对象中,并将这些轴对象放置在包含它们的更大的轴对象中。例如:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [10, 20, 30, 40]

fig, ax = plt.subplots()

ax.plot(x, y)

legend = ax.legend('Data', loc='upper center', frameon=False)
legend_frame = legend.get_frame()
legend_frame.set_facecolor('none')  # 设置背景为透明色

box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
                 box.width, box.height * 0.9])

ax_sub = fig.add_axes([0, 0, 1, 1], visible=False)
ax_sub.axis('off')
legend_sub = ax_sub.legend(['Data'], frameon=False, fancybox=False,
                            handletextpad=0, borderpad=0,
                            loc='center', bbox_to_anchor=(0.5, -0.025))

plt.show()

在上面的代码中,我们创建了一个包含一个轴对象的图形。我们然后在轴对象上绘制了一个数据图表,然后创建了一个图例对象并将其放置在轴对象上方。我们创建了一个新的轴对象并将其放置在图形的左下角,然后将图例放置在新轴对象中。最后,我们将原始轴对象向上移动一些以便容纳新的轴和图例。

这两种方法都可以将图例放置在绘图之外。选择哪种方法取决于你要实现的效果以及当前的绘图环境。