在Matplotlib中为同一坐标轴上的多个箱线图添加图例
参考: Adding a legend to a Matplotlib boxplot with multiple plots on the same axis
在数据可视化中,箱线图是一种常用的图表类型,用于展示数据的分布情况,包括中位数、四分位数以及异常值。当在同一个坐标轴上绘制多个箱线图时,为了更好地区分不同的数据集,通常需要添加图例。本文将详细介绍如何在使用Python的Matplotlib库时,为同一坐标轴上的多个箱线图添加图例。
1. 基础知识回顾
在深入具体的代码实现之前,我们首先回顾一下Matplotlib中箱线图的基础知识。箱线图通过箱体、须线和异常点来描述数据的分布特征。箱体显示了数据的四分位范围,须线表示数据的范围,而异常点则标示出那些超出常规范围的数据点。
2. 准备数据
为了演示如何为箱线图添加图例,我们首先需要准备一些数据。在本文的示例中,我们将生成三组不同的数据,每组数据都将用于生成一个箱线图。
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
3. 绘制单个箱线图
在添加多个箱线图之前,我们先从绘制单个箱线图开始。这有助于理解箱线图的基本绘制方法。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 绘制单个箱线图
plt.boxplot(data1)
plt.title("单个箱线图示例 - how2matplotlib.com")
plt.show()
Output:
4. 在同一坐标轴上绘制多个箱线图
接下来,我们将在同一个坐标轴上绘制多个箱线图。这可以通过简单地将所有数据集放在一个列表中,并传递给boxplot()
函数来实现。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 绘制多个箱线图
plt.boxplot([data1, data2, data3])
plt.title("多个箱线图示例 - how2matplotlib.com")
plt.show()
Output:
5. 为箱线图添加图例
为了在图表中区分不同的箱线图,我们需要添加图例。Matplotlib的boxplot()
函数返回一个字典,其中包含了绘制箱线图所需的所有图形元素。我们可以使用这些元素来创建图例。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 绘制箱线图并添加图例
fig, ax = plt.subplots()
boxplots = ax.boxplot([data1, data2, data3])
ax.legend([boxplots["boxes"][0], boxplots["boxes"][1], boxplots["boxes"][2]], ['Group 1', 'Group 2', 'Group 3'], title="Legend")
plt.title("带图例的多个箱线图 - how2matplotlib.com")
plt.show()
Output:
6. 自定义图例样式
图例的样式可以通过修改legend()
函数的参数来自定义。例如,我们可以改变图例的位置、字体大小和边框样式。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 自定义图例样式
fig, ax = plt.subplots()
boxplots = ax.boxplot([data1, data2, data3])
ax.legend([boxplots["boxes"][0], boxplots["boxes"][1], boxplots["boxes"][2]], ['Group 1', 'Group 2', 'Group 3'], title="Legend", loc='upper right', fontsize='small', fancybox=True)
plt.title("自定义样式的图例 - how2matplotlib.com")
plt.show()
Output:
7. 处理异常值的图例
当箱线图中包含异常值时,我们可能需要在图例中特别标注这些异常值。这可以通过添加额外的图例项来实现。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 处理异常值的图例
fig, ax = plt.subplots()
boxplots = ax.boxplot([data1, data2, data3], showfliers=True)
ax.legend([boxplots["boxes"][0], boxplots["fliers"][0]], ['Group 1', 'Outliers'], title="Legend")
plt.title("处理异常值的图例 - how2matplotlib.com")
plt.show()
Output:
8. 使用不同颜色和样式
为了使图例更加直观,我们可以为不同的箱线图使用不同的颜色和样式。这可以通过设置boxplot()
函数的patch_artist
参数和使用set()
方法来实现。
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# 使用不同颜色和样式
fig, ax = plt.subplots()
boxplots = ax.boxplot([data1, data2, data3], patch_artist=True)
colors = ['pink', 'lightblue', 'lightgreen']
for patch, color in zip(boxplots['boxes'], colors):
patch.set_facecolor(color)
ax.legend([boxplots["boxes"][0], boxplots["boxes"][1], boxplots["boxes"][2]], ['Group 1', 'Group 2', 'Group 3'], title="Legend")
plt.title("使用不同颜色和样式的图例 - how2matplotlib.com")
plt.show()
Output:
9. 结论
在本文中,我们详细介绍了如何在Matplotlib中为同一坐标轴上的多个箱线图添加图例。通过提供的示例代码,读者可以了解到如何绘制单个或多个箱线图,以及如何通过不同的方式添加和自定义图例。正确的使用图例可以帮助观众更好地理解图表中的信息,是数据可视化中不可或缺的一部分。