一个点展示多个数据
在箱形图(box plot)中,如果你想在一个点上展示多组数据,可以通过在同一位置绘制多个箱形图来实现。这通常用于比较不同组在相同特征上的分布情况
假设我们有三组数据,每组数据包含多个子组,每个子组在同一个 x 轴位置上。
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
data1 = [np.random.normal(0, 1, 100), np.random.normal(1, 1, 100), np.random.normal(2, 1, 100)]
data2 = [np.random.normal(0.5, 1, 100), np.random.normal(1.5, 1, 100), np.random.normal(2.5, 1, 100)]
data3 = [np.random.normal(0.2, 1, 100), np.random.normal(1.2, 1, 100), np.random.normal(2.2, 1, 100)]
# 合并数据
all_data = [data1, data2, data3]
# 创建箱形图
fig, ax = plt.subplots()
positions = [[1, 2, 3], [1.5, 2.5, 3.5], [1.2, 2.2, 3.2]]
# 绘制每个组的箱形图
colors = ['lightblue', 'lightgreen', 'lightyellow']
for i, (group, pos) in enumerate(zip(all_data, positions)):
bp = ax.boxplot(group, positions=pos, widths=0.2, patch_artist=True, showmeans=True, meanline=True)
for patch in bp['boxes']:
patch.set_facecolor(colors[i])
# 设置 X 轴标签
ax.set_xticks([1.25, 2.25, 3.25])
ax.set_xticklabels(['Group 1', 'Group 2', 'Group 3'])
# 添加标题和标签
plt.title('Box Plot with Multiple Data Groups')
plt.xlabel('Data Set')
plt.ylabel('Values')
# 添加图例
legend_elements = [plt.Line2D([0], [0], marker='s', color='w', label='Group 1', markerfacecolor='lightblue', markersize=10),
plt.Line2D([0], [0], marker='s', color='w', label='Group 2', markerfacecolor='lightgreen', markersize=10),
plt.Line2D([0], [0], marker='s', color='w', label='Group 3', markerfacecolor='lightyellow', markersize=10)]
plt.legend(handles=legend_elements, loc='upper left')
# 显示图形
plt.show()
导入库:
import matplotlib.pyplot as plt
import numpy as np
示例数据:
data1 = [np.random.normal(0, 1, 100), np.random.normal(1, 1, 100), np.random.normal(2, 1, 100)]
data2 = [np.random.normal(0.5, 1, 100), np.random.normal(1.5, 1, 100), np.random.normal(2.5, 1, 100)]
data3 = [np.random.normal(0.2, 1, 100), np.random.normal(1.2, 1, 100), np.random.normal(2.2, 1, 100)]
data1
, data2
, data3
分别是三组数据,每组数据包含三个子组。合并数据:
all_data = [data1, data2, data3]
创建箱形图:
fig, ax = plt.subplots()
设置位置:
positions = [[1, 2, 3], [1.5, 2.5, 3.5], [1.2, 2.2, 3.2]]
positions
列表定义了每个子组在 X 轴上的位置。通过微调位置,可以避免箱形图重叠。绘制每个组的箱形图:
colors = ['lightblue', 'lightgreen', 'lightyellow']
for i, (group, pos) in enumerate(zip(all_data, positions)):
bp = ax.boxplot(group, positions=pos, widths=0.2, patch_artist=True, showmeans=True, meanline=True)
for patch in bp['boxes']:
patch.set_facecolor(colors[i])
ax.boxplot
函数用于绘制箱形图。positions
参数设置每个子组的位置。widths
参数设置箱形图的宽度。patch_artist=True
允许填充箱体颜色。showmeans=True
和 meanline=True
显示平均线和均值。for patch in bp['boxes']
循环为每个箱体设置颜色。设置 X 轴标签:
ax.set_xticks([1.25, 2.25, 3.25])
ax.set_xticklabels(['Group 1', 'Group 2', 'Group 3'])
添加标题和标签:
plt.title('Box Plot with Multiple Data Groups')
plt.xlabel('Data Set')
plt.ylabel('Values')
添加图例:
legend_elements = [plt.Line2D([0], [0], marker='s', color='w', label='Group 1', markerfacecolor='lightblue', markersize=10),
plt.Line2D([0], [0], marker='s', color='w', label='Group 2', markerfacecolor='lightgreen', markersize=10),
plt.Line2D([0], [0], marker='s', color='w', label='Group 3', markerfacecolor='lightyellow', markersize=10)]
plt.legend(handles=legend_elements, loc='upper left')
显示图形:
plt.show()