在Matplotlib中将散点图添加到箱线图

在Matplotlib中将散点图添加到箱线图

参考: Adding a scatter of points to a boxplot using Matplotlib

在数据可视化的过程中,箱线图(Boxplot)和散点图(Scatter Plot)是两种常用的图表类型,分别用于展示数据的分布情况和观察数据点的分散情况。Matplotlib 是一个非常强大的 Python 绘图库,它提供了丰富的接口来创建和展示这些图表。本文将详细介绍如何在 Matplotlib 中将散点图添加到箱线图中,以便同时展示数据的总体分布和具体的数据点信息。

基础知识

在开始具体的代码实现之前,我们首先需要了解箱线图和散点图的基本概念及其在 Matplotlib 中的基本绘制方法。

箱线图(Boxplot)

箱线图是一种用于表示一组数据分布情况的图表。它可以展示数据的最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)和最大值。箱线图的中间箱体展示了中间50%的数据分布,而箱体外的线(触须)则展示了整体数据的范围。

散点图(Scatter Plot)

散点图用于展示两个变量之间的关系,通过在图表中标记每个数据点的位置,可以观察数据点的分布趋势和集中趋势。在将散点图添加到箱线图中时,通常是在箱线图的基础上,用散点来表示具体的数据点位置,以增加图表的信息量。

Matplotlib 绘图

接下来,我们将通过一系列的示例代码来展示如何在 Matplotlib 中将散点图添加到箱线图中。每个示例都是独立的,可以直接运行。

示例代码 1:基础箱线图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)
plt.title("基础箱线图 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 2:添加散点图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='red', alpha=0.5)
plt.title("箱线图与散点图结合 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 3:自定义散点图颜色和大小

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='blue', s=50, alpha=0.5)
plt.title("自定义散点图颜色和大小 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 4:多组数据的箱线图与散点图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 1  # 偏移数据

# 创建箱线图
plt.boxplot([data1, data2], positions=[1, 2])

# 添加散点图
plt.scatter(np.ones(100), data1, color='green', alpha=0.5)
plt.scatter(np.ones(100) * 2, data2, color='purple', alpha=0.5)
plt.title("多组数据的箱线图与散点图 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 5:调整散点图的透明度

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='black', alpha=0.2)
plt.title("调整散点图的透明度 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 6:使用不同的标记样式

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, marker='^', color='magenta')
plt.title("使用不同的标记样式 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 7:为散点图添加边框

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, edgecolors='black', facecolors='none')
plt.title("为散点图添加边框 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 8:多组数据的箱线图与散点图,不同颜色

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 1  # 偏移数据

# 创建箱线图
plt.boxplot([data1, data2], positions=[1, 2])

# 添加散点图
plt.scatter(np.ones(100), data1, color='orange', alpha=0.5)
plt.scatter(np.ones(100) * 2, data2, color='cyan', alpha=0.5)
plt.title("多组数据的箱线图与散点图,不同颜色 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 9:自定义箱线图和散点图的属性

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data, notch=True, vert=False, patch_artist=True, boxprops=dict(facecolor='yellow', color='red'))

# 添加散点图
plt.scatter(np.ones(100), data, color='blue', s=20, alpha=0.5)
plt.title("自定义箱线图和散点图的属性 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 10:为箱线图和散点图添加图例

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
box = plt.boxplot(data, patch_artist=True)
for patch in box['boxes']:
    patch.set_facecolor('lightblue')

# 添加散点图
scatter = plt.scatter(np.ones(100), data, color='darkred', label='Data Points')

# 添加图例
plt.legend(handles=[scatter], loc='upper right')
plt.title("为箱线图和散点图添加图例 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 11:调整箱线图和散点图的布局

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data, widths=0.5)

# 添加散点图
plt.scatter(np.ones(100), data, color='green', alpha=0.3)
plt.title("调整箱线图和散点图的布局 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 12:为散点图设置不同的透明度

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='blue', alpha=np.linspace(0.1, 1, 100))
plt.title("为散点图设置不同的透明度 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 13:使用subplot展示多个箱线图和散点图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 1

# 创建子图
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# 第一个子图
axs[0].boxplot(data1)
axs[0].scatter(np.ones(100), data1, color='red')
axs[0].set_title("第一组数据 - how2matplotlib.com")

# 第二个子图
axs[1].boxplot(data2)
axs[1].scatter(np.ones(100) * 2, data2, color='blue')
axs[1].set_title("第二组数据 - how2matplotlib.com")

plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 14:自定义散点图的标记形状

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, marker='*', color='magenta')
plt.title("自定义散点图的标记形状 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 15:结合多种颜色和标记样式

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
colors = ['red', 'green', 'blue', 'yellow', 'purple']
markers = ['o', '^', 's', 'p', 'h']
for i in range(5):
    plt.scatter(np.ones(100) * (i+1), data + i, color=colors[i], marker=markers[i], alpha=0.5)
plt.title("结合多种颜色和标记样式 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 16:为散点图添加标签

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='blue')
for i, txt in enumerate(data):
    plt.annotate(f"{txt:.2f}", (1, data[i]), textcoords="offset points", xytext=(0,10), ha='center')
plt.title("为散点图添加标签 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 17:调整散点图的位置

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100) * 1.1, data, color='green', alpha=0.5)  # 将散点图稍微向右移动
plt.title("调整散点图的位置 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 18:使用不同的颜色渐变

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
colors = np.linspace(0, 1, 100)
plt.scatter(np.ones(100), data, c=colors, cmap='viridis')
plt.title("使用不同的颜色渐变 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 19:为箱线图和散点图设置不同的轴标题

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(100)

# 创建箱线图
plt.boxplot(data)

# 添加散点图
plt.scatter(np.ones(100), data, color='red')
plt.xlabel("X轴标题 - how2matplotlib.com")
plt.ylabel("Y轴标题 - how2matplotlib.com")
plt.title("为箱线图和散点图设置不同的轴标题 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

示例代码 20:结合多个数据集的箱线图和散点图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 1
data3 = np.random.randn(100) - 1

# 创建箱线图
plt.boxplot([data1, data2, data3], positions=[1, 2, 3])

# 添加散点图
plt.scatter(np.ones(100), data1, color='blue', alpha=0.5)
plt.scatter(np.ones(100) * 2, data2, color='green', alpha=0.5)
plt.scatter(np.ones(100) * 3, data3, color='red', alpha=0.5)
plt.title("结合多个数据集的箱线图和散点图 - how2matplotlib.com")
plt.show()

Output:

在Matplotlib中将散点图添加到箱线图

总结

本文通过20个独立的示例代码详细介绍了如何在Matplotlib中将散点图添加到箱线图中。这种结合方式不仅增强了图表的信息量,还使得数据的分布和个别数据点的情况一目了然。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程