如何使用 Matplotlib 将图例放在图之外?

图表或任何绘图的图例提供了绘图内元素的描述。这些元素可以是绘制在图表上的实体、它们的比例、它们的颜色等等。图例通常是放置在图表右上角或左上角的框,但其位置可以自定义。

matplotlib 库是一个强大的开源数据可视化工具。该库包含许多绘图,包括用于可视化数据的 3D 绘图,这有助于我们更好地理解和分析数据。我们甚至可以使用 Matplotlib 可视化一个数据框或一系列 Pandas 库。

matplotlib 有许多用于数据可视化的函数。它有一个名为 的函数legend(),专门为数据图分配图例。

请访问本文以了解有关 Matplotlib 中可用绘图类型的更多信息。

先决条件

在继续使用 Matplotlib 库之前,我们需要首先确保它已安装在我们的系统中。您可以使用pip如下所示的命令安装该库。

Using the terminal
pip install matplotlib
Installing in any notebook such as Colab or Jupyter
! pip install matplotlib
Using the conda command prompt
conda install -c conda-forge matplotlib

什么是传奇?

图例是一个小方框,用于描述数据图或赋予其含义。它通常放置在图的右上角或左上角,但我们可以使用该legend函数自定义图例的位置和外观。

让我们看看使用下面给出的语法的此方法的一个示例。

matplotlib.pyplot.legend(*args, **kwargs)

下面列出并解释了该函数的重要参数。

1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt
x=[2,4,6,8,10]
y=[1,3,5,7,11]
z=[2,3,5,7,11]
plt.plot(x, y, label='Even&Odd')
plt.plot(x, z, label='Even&Prime')
plt.plot(y,z,label='Odd&Prime')
plt.legend(title='LEGEND')
plt.title('Even,Odd&Prime Numbers')
plt.show()

在您的环境中安装 matplotlib 库后。您可以使用代码的第一行导入它。

我们正在创建三个包含偶数、奇数和素数的列表。它们分别命名为 x、y 和 z。

接下来,我们调用该plot函数三次,依次绘制奇偶数(x 和 y)、偶素数(x 和 z)以及奇素数(y 和 z)的组合。这些图也使用该label属性来命名。

调用该legend函数来显示绘图的颜色以及与其关联的标签。我们还指定了图例的标题。

用于title为整个图或图表命名。

show函数用于显示图形。

带标题的图例

如何将图例置于情节之外?

在前面的示例中,我们已经看到默认情况下图例如何出现在绘图或图形边界内。但是有一种方法可以使用一些技术将图例放置在情节之外。

相关:访问这篇文章了解如何使用数据框的索引作为 X 轴的标签。

使用 Bbox 进行锚定

该属性是图例函数的一个属性,用于将框放置在与其位置相对应的位置。

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
z = [1, 3, 5, 7, 9]
plt.plot(x, y, label='Line 1')
plt.plot(y, z, label='Line 2')
plt.legend( bbox_to_anchor=(1.1,1.05),shadow=True,title='Legend')
plt.title('Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

我们在第一行将 matplotlib 库作为 plt 导入。

接下来,我们创建三个名为 x、y 和 z 的列表,其中包含随机元素。

接下来,我们绘制两条线 – x 相对于 y 和 y 相对于 z。这些行在 的帮助下被赋予标签label

legend 函数用于创建一个图例,该图例采用bbox_to_anchor具有一些坐标来放置图例的参数。阴影属性用于为框创建阴影效果。我们还可以使用 为图例提供标题title

接下来的三行用于提供图形的标题以及 X 轴和 Y 轴的名称。

show方法用于显示绘图。

使用 Bbox 将图例放置在绘图之外

将图例放在边框上

如果我们知道用于获得所需输出的正确坐标,则可以将图例放置在我们想要的位置。

让我们看看如何在图表的边框上添加图例。

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y= [2, 4, 6, 8, 10]
z = [1,11,3,4,7]
plt.plot(x, y, label='Line 1')
plt.plot(x, z, label='Line 2')
plt.legend(bbox_to_anchor=(0.9,0.8),title='Legend',shadow=True)
plt.title('Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

第一步是导入 matplotlib 库。

接下来的三行创建三个不同的列表,名为 x、y 和 z,其中包含一些数字。

我们绘制两条线 – x 相对于 y 和 x 相对于 z。这些线是使用该plot函数绘制的。

接下来,我们使用该属性为此图创建图例bbox_to_anchor我们选择的坐标是 (0.9,0.8),这导致图例位于中心的右侧边框上。阴影属性用于为框创建阴影效果。

接下来的三行创建图形的标题,并命名 x 轴和 y 轴。

show 方法用于将图形显示为输出。

边境传奇

将 Loc 属性与 Bbox 一起使用

在此示例中,我们将使用该loc属性以及 来bbox_to_anchor在图表顶部创建一个唯一的图例。

1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
import matplotlib.pyplot as plt
groc = {'Food': ['Tacos', 'Mac and Cheese', 'Carbonara', 'Lasagna', 'Croissant'],
        'Calories': [226, 164, 574, 135, 406],
        'Quantity':[3,1,2,3,1]}
df = pd.DataFrame(groc)
plt.plot(df['Food'], df['Calories'], label='F&C')
plt.plot(df['Food'], df['Quantity'], label='F&Q')
plt.title('Different foods and their calories')
plt.xlabel('Food Item')
plt.ylabel('Calories')
plt.legend(loc='center right', bbox_to_anchor=(0.3,1.1),ncol=2,fancybox=True)
plt.show()

我们将绘制一个数据框,为此,我们需要首先导入 Pandas 库。我们还在下一行中导入 matplotlib 库。

创建了一个名为 groc 的字典,其中包含一些食品、它们各自的卡路里以及购买的数量。借助该方法将该字典转换为数据框pd.DataFrame

我们在第一个图中绘制食物列与卡路里的关系,在第二个图中绘制食物与数量的关系。给出了它们各自的标签。

接下来,我们指定 x 轴和 y 轴的标题和标签。图例函数用于创建一个包含图形描述的框,我们使用loc给定的属性center rightbbox使用的坐标为 (0.3,1.1)。ncol参数用于定义图例框应有多少列。在本例中,它是 2。fancybox用于为框创建圆角边缘。

最后使用show方法来显示图形。

使用 Bbox 和 Loc 的图例

总而言之,我们已经了解了 matplotlib 中图形的图例是什么。它是一个描述图形元素的框,例如绘图类型、绘制的元素等。默认情况下,当使用 matplotlib 的 legend 函数时,该图例出现在绘图边界内。

matplotlib 是一个数据可视化工具,由许多图组成,可以帮助我们更好地可视化数据。
我们已经通过绘制三个图看到了简单图例的示例:偶奇数、偶素数和奇素数。
我们为这个图创建了一个图例,包括它的标题。

将图例置于情节之外,我们看到了三种方法。
在第一种方法中,我们使用 legend 函数的 bbox 属性定义一对坐标,将图例放置在图形边界之外,并带有阴影效果和标题。

在下一个方法中,我们使用相同的 bbox_to_anchor 属性和不同的坐标,将图例放置在中心上方的右侧边框上。

在上一个示例中,我们使用了 legend 函数的 loc 参数以及 bbox 属性。我们在其中绘制了一个由三个不同列组成的数据框。ncol参数用于定义图例中显示的列数。我们还在 的帮助下给盒子做了圆角边缘fancybox

这些结果可以定制并且实验起来很有趣。尝试以上示例,祝您玩得开心!

参考

您可以在此处找到有关图例功能的更多信息。

请参阅此 StackOverflow 答案链,了解使用 matplotlib 将图例放置在绘图之外的更多示例。