在Matplotlib中为同一坐标轴上的多个箱线图添加图例
参考: Adding a legend to a Matplotlib boxplot with multiple plots on the same axis
在数据可视化中,箱线图是一种常用的图表类型,用于展示数据的分布情况,包括最小值、第一四分位数、中位数、第三四分位数和最大值。当我们在同一坐标轴上绘制多个箱线图时,为了更好地区分不同的数据集,通常需要添加图例。本文将详细介绍如何在使用Matplotlib库时,为同一坐标轴上的多个箱线图添加图例。
示例代码 1:基本箱线图
首先,我们从一个简单的例子开始,创建一个基本的箱线图。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 2:自定义箱线图颜色
接下来,我们将自定义箱线图的颜色,并添加相应的图例。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置颜色
colors = ['blue', 'green']
for patch, color in zip(bp['boxes'], colors):
patch.set_facecolor(color)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 3:为箱线图添加不同的填充样式
我们可以为箱线图的不同部分设置不同的填充样式,以增加视觉效果。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置填充样式
bp['boxes'][0].set(hatch='/', fill=False)
bp['boxes'][1].set(hatch='\\', fill=False)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 4:为箱线图添加不同的边框样式
此示例展示如何为箱线图的边框设置不同的样式。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置边框样式
bp['boxes'][0].set(linestyle='-', linewidth=2)
bp['boxes'][1].set(linestyle=':', linewidth=2)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 5:为箱线图添加不同的异常值标记
在箱线图中,异常值的标记也是一个重要的视觉元素。我们可以自定义这些标记的样式。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置异常值标记
bp['fliers'][0].set(marker='o', color='red', alpha=0.5)
bp['fliers'][1].set(marker='d', color='green', alpha=0.5)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 6:为箱线图添加标题和坐标轴标签
为了使图表更加完整,我们通常需要添加标题和坐标轴标签。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 添加标题和坐标轴标签
ax.set_title('Comparison of Data 1 and Data 2 - how2matplotlib.com')
ax.set_xlabel('Category - how2matplotlib.com')
ax.set_ylabel('Values - how2matplotlib.com')
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 7:为箱线图设置不同的刻度标签样式
最后,我们可以自定义刻度标签的样式,以改善图表的可读性。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置刻度标签样式
ax.set_xticklabels(['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'], rotation=45, fontsize='small')
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
以上是在Matplotlib中为同一坐标轴上的多个箱线图添加图例的几种方法。通过这些示例,我们可以看到,Matplotlib提供了强大的功能来自定义和优化图表的各个方面。希望这些示例能帮助您在实际应用中更好地利用Matplotlib进行数据可视化。
示例代码 8:为箱线图设置背景颜色
为了使图表更加美观,我们可以设置图表的背景颜色。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置背景颜色
ax.set_facecolor('lightgray')
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 9:为箱线图设置网格线
网格线可以帮助我们更好地理解数据的分布。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置网格线
ax.grid(True)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 10:为箱线图设置不同的坐标轴范围
有时候,为了更好地展示数据,我们需要调整坐标轴的范围。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 设置坐标轴范围
ax.set_ylim(50, 150)
# 添加图例
ax.legend([bp["boxes"][0], bp["boxes"][1]], ['Data 1', 'Data 2'], loc='upper right')
plt.show()
Output:
示例代码 11:为箱线图添加多个图例
在某些情况下,我们可能需要为不同的图形元素添加多个图例。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
# 绘制箱线图
fig, ax = plt.subplots()
bp = ax.boxplot([data1, data2], patch_artist=True, labels=['Data 1 - how2matplotlib.com', 'Data 2 - how2matplotlib.com'])
# 添加多个图例
legend1 = ax.legend([bp["boxes"][0]], ['Data 1'], loc='upper right')
legend2 = ax.legend([bp["boxes"][1]], ['Data 2'], loc='upper left')
ax.add_artist(legend1)
plt.show()
Output:
以上示例展示了如何在Matplotlib中为同一坐标轴上的多个箱线图添加图例,以及如何通过各种自定义选项来增强图表的表现力和信息传递效果。