高级箱型图

一个点展示多个数据

在箱形图(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()

解释

  1. 导入库

    import matplotlib.pyplot as plt
    import numpy as np
  2. 示例数据

    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)]
    • data1data2data3 分别是三组数据,每组数据包含三个子组。
  3. 合并数据

    all_data = [data1, data2, data3]
  4. 创建箱形图

    fig, ax = plt.subplots()
  5. 设置位置

    positions = [[1, 2, 3], [1.5, 2.5, 3.5], [1.2, 2.2, 3.2]]
    • positions 列表定义了每个子组在 X 轴上的位置。通过微调位置,可以避免箱形图重叠。
  6. 绘制每个组的箱形图

    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'] 循环为每个箱体设置颜色。
  7. 设置 X 轴标签

    ax.set_xticks([1.25, 2.25, 3.25])
    ax.set_xticklabels(['Group 1', 'Group 2', 'Group 3'])
  8. 添加标题和标签

    plt.title('Box Plot with Multiple Data Groups')
    plt.xlabel('Data Set')
    plt.ylabel('Values')
  9. 添加图例

     
    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')
  10. 显示图形

    plt.show()

你可能感兴趣的:(图形展示,python)