Matplotlib图例放在图形外部

Matplotlib图例放在图形外部

参考:matplotlib legend outside figure

在Matplotlib中,图例是一个显示关于每个绘图元素的标签,通常放在图形内部。但是有时候,我们希望将图例放在图形的外部,使得图形更清晰。在本文中,我们将介绍如何使用Matplotlib将图例放在图形外部。

创建一个简单的图形并将图例放在图形外部

首先,让我们创建一个简单的散点图,并将图例放在图形外部。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1))
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们使用plt.scatter创建了一个散点图,并使用plt.legend将图例放在图形的右上角外部(loc='upper right'指定了位置,bbox_to_anchor=(1.2, 1)指定了图例的具体位置)。

设置图例的外部边框

有时候,我们希望给图例设置一个外部边框。下面的示例代码演示了如何给图例添加一个外部边框。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), frameon=True)
plt.show()

Output:

Matplotlib图例放在图形外部

上面的示例代码中,我们在plt.legend中传入frameon=True参数来显示图例的边框。

使用ncol参数设置图例的列数

如果图例中包含多个标签,可以使用ncol参数来设置图例的列数。下面的示例代码演示了如何使用ncol参数设置图例的列数为2。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]

plt.scatter(x, y1, label='data points 1')
plt.scatter(x, y2, label='data points 2')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), ncol=2)
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们使用ncol=2参数将图例分成两列。

调整图例的大小

有时候,我们希望调整图例的大小,使得图例更易于阅读。下面的示例代码演示了如何使用fontsize参数设置图例的字体大小为12。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), fontsize=12)
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们在plt.legend中传入fontsize=12参数设置图例的字体大小为12。

水平放置图例

有时候,我们希望将图例水平放置在图形的底部。下面的示例代码演示了如何使用mode参数将图例水平放置在底部。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
plt.legend(loc='lower center', bbox_to_anchor=(0.5, -0.2), mode='expand')
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们在plt.legend中传入loc='lower center'参数将图例放在底部居中,bbox_to_anchor=(0.5, -0.2)指定了图例的位置,mode='expand'将图例水平放置在底部。

给图例添加阴影

有时候,我们希望给图例添加一些装饰效果,如阴影。下面的示例代码演示了如何给图例添加阴影。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
legend = plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1))
legend.get_frame().set_linewidth(2)
legend.get_frame().set_edgecolor('black')
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们使用legend.get_frame().set_linewidth(2)legend.get_frame().set_edgecolor('black')给图例添加了边框和阴影效果。

调整图例的间距

有时候,我们希望调整图例的间距,使得图例更美观。下面的示例代码演示了如何使用columnspacing参数设置图例的列间距为0.8。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]

plt.scatter(x, y1, label='data points 1')
plt.scatter(x, y2, label='data points 2')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), columnspacing=0.8)
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们在plt.legend中传入columnspacing=0.8参数设置图例的列间距为0.8。

调整图例的边距

有时候,我们希望调整图例的边距,使得图例更美观。下面的示例代码演示了如何使用borderaxespad参数设置图例距离坐标轴的边距为0.5。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), borderaxespad=0.5)
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们在plt.legend中传入borderaxespad=0.5参数设置图例距离坐标轴的边距为0.5。

自定义图例的形状和大小

有时候,我们希望自定义图例的形状和大小,使得图例更加个性化。下面的示例代码演示了如何使用`handler_map参数设置图例的handler_map。

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.scatter(x, y, label='data points')
circle_patch = mpatches.Circle((0.5, 0.5), 0.1, edgecolor='black', facecolor='red')
plt.legend(handles=[circle_patch], handler_map={mpatches.Circle: plt.Line2D([0], [0], color='black', lw=2)})
plt.show()

在上面的示例代码中,我们使用mpatches.Circle创建一个圆形图例,并通过handler_map参数设置图例的handler_map

在多个子图中放置图例

有时候,我们希望在多个子图中放置一个共同的图例,使得图表更清晰。下面的示例代码演示了如何在多个子图中放置一个共同的图例。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

for i, ax in enumerate(axs.flat, start=1):
    x = [1, 2, 3, 4, 5]
    y = [2*i, 4*i, 6*i, 8*i, 10*i]
    ax.scatter(x, y, label=f'data points {i}')

plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), ncol=2)
plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们创建了一个包含4个子图的画布,并在每个子图中放置了不同的散点图。然后我们使用plt.legend在整个画布中放置一个共同的图例。

将图例放置在子图的外部

有时候,我们希望将图例放置在子图的外部,使得子图更加清晰。下面的示例代码演示了如何在子图的外部放置一个共同的图例。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

for i, ax in enumerate(axs.flat, start=1):
    x = [1, 2, 3, 4, 5]
    y = [2*i, 4*i, 6*i, 8*i, 10*i]
    ax.scatter(x, y, label=f'data points {i}')
    ax.legend(loc='upper right', bbox_to_anchor=(1.2, 1))

plt.show()

Output:

Matplotlib图例放在图形外部

在上面的示例代码中,我们在每个子图中使用ax.legend将图例放置在子图的外部。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程