📅  最后修改于: 2023-12-03 15:09:01.696000             🧑  作者: Mango
在数据可视化过程中,图例是非常重要的一部分。它可以帮助读者更好地理解图表内容,展示图表中的关键信息。但当我们需要在多个图表中展示图例时,不仅增加了排版难度,也会让读者感到混乱。所以本文将为大家介绍如何在多个图上放置图例。
我们可以使用Axes.subplot
函数在单个画布上创建多个图表,并使用legend
函数将图例添加到其中一个图表中。下面是代码示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建画布和子图
fig, axes = plt.subplots(nrows=2, ncols=2)
# 绘制图表
x = np.linspace(0, 5, 100)
y1, y2, y3, y4 = np.sin(x), np.cos(x), np.tan(x), np.exp(x)
axes[0, 0].plot(x, y1, label='sin')
axes[0, 1].plot(x, y2, label='cos')
axes[1, 0].plot(x, y3, label='tan')
axes[1, 1].plot(x, y4, label='exp')
# 添加图例
axes[0, 0].legend(loc='upper left')
在这个例子中,我们创建了一个2x2
的子图表,然后为每个图表添加了一个标签。最后,我们通过在其中一个图表中使用 legend
函数将它们组合在一个图例中。
如果您希望在多个子图之间放置图例,那么我们可以使用 figlegend
函数。这个方法会将图例放置在整个画布中,并通过指定位置来控制图例的位置。下面是代码示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建画布和子图
fig, axes = plt.subplots(nrows=2, ncols=2)
# 绘制图表
x = np.linspace(0, 5, 100)
y1, y2, y3, y4 = np.sin(x), np.cos(x), np.tan(x), np.exp(x)
axes[0, 0].plot(x, y1, label='sin')
axes[0, 1].plot(x, y2, label='cos')
axes[1, 0].plot(x, y3, label='tan')
axes[1, 1].plot(x, y4, label='exp')
# 添加图例
lines, labels = fig.axes[-1].get_legend_handles_labels()
fig.legend(lines, labels, loc='upper left')
在这个例子中,我们首先创建了一个 2x2
的子图表,为每个图表添加了标签,然后使用 figlegend
函数将它们组合在一个图例中。
如果您需要更精确地控制图例的位置,那么我们可以使用 offsetbox
模块。这个方法可以让我们将图例放置在任意位置,并控制图例的偏移、尺寸和旋转等。下面是代码示例:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import AnchoredOffsetbox, AuxTransformBox, VPacker, TextArea
# 创建画布和子图
fig, axes = plt.subplots(nrows=2, ncols=2)
# 绘制图表
x = np.linspace(0, 5, 100)
y1, y2, y3, y4 = np.sin(x), np.cos(x), np.tan(x), np.exp(x)
axes[0, 0].plot(x, y1, label='sin')
axes[0, 1].plot(x, y2, label='cos')
axes[1, 0].plot(x, y3, label='tan')
axes[1, 1].plot(x, y4, label='exp')
# 创建图例
labels = ['sin', 'cos', 'tan', 'exp']
texts = [TextArea(txt, textprops=dict(color='k', size=8)) for txt in labels]
# 将文本组合成一个盒子
vpacker = VPacker(children=texts, align='center', pad=0, sep=-3)
# 将盒子与坐标轴变换包装在一起
abox_aux = AuxTransformBox(AnchoredOffsetbox(loc='upper right', borderpad=0, bbox_to_anchor=(1.1, 1.5), frameon=False))
abox_aux.add_artist(vpacker)
fig.add_artist(abox_aux)
在这个例子中,我们首先创建了一个 2x2
的子图表,为每个图表添加了标签,然后使用 offsetbox
模块创建了一个文本盒子,并将这个盒子组合成一个图例。最后,我们将图例放置在画布的右上角,并使用 bbox_to_anchor
参数控制了图列的偏移。
本文介绍了三种方法来在多个图上放置图例,每种方法都使用了不同的技术。无论您选择哪一种方法,在制作数据可视化图表时,图例是非常重要的。希望这篇文章能够帮助您更好地控制图例的布局和位置,让您的数据可视化更加美观和易于理解。