在Matplotlib中为同一坐标轴上的多个箱线图添加图例

在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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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提供了强大的功能来自定义和优化图表的各个方面。希望这些示例能帮助您在实际应用中更好地利用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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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:

在Matplotlib中为同一坐标轴上的多个箱线图添加图例

示例代码 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中为同一坐标轴上的多个箱线图添加图例

以上示例展示了如何在Matplotlib中为同一坐标轴上的多个箱线图添加图例,以及如何通过各种自定义选项来增强图表的表现力和信息传递效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程