当前位置:首页>python>python数据可视化技巧的100个练习 -- 4. 绘制考试成绩的箱线图

python数据可视化技巧的100个练习 -- 4. 绘制考试成绩的箱线图

  • 2026-10-11 05:42:33
python数据可视化技巧的100个练习 -- 4. 绘制考试成绩的箱线图
重要性★★★★☆
难度★★★☆☆
你是一名学校学区的数据分析师。
校长要求你分析不同班级学生的考试成绩,以比较他们的表现。
你的任务是创建一个箱线图,以可视化每个班级的考试成绩分布。
数据包括三个班级的考试成绩:A 班、B 班和 C 班。
每个班级有 30 名学生。
成绩范围为 0 到 100 分。
你的目标是:
为这三个班级生成样本数据。
使用 matplotlib 创建一个箱线图,比较三个班级的考试成绩。
在 x 轴上正确标记班级名称,在 y 轴上标记“考试成绩”。
添加标题:“班级间考试成绩比较”。
显示图表。
编写一个完成这些任务的 Python 脚本。
确保使用适当的数据结构和 matplotlib 函数,创建一个信息丰富且视觉上吸引人的箱线图。

【数据生成代码示例】

import numpy as npnp.random.seed(42)class_a = np.random.normal(75, 10, 30).clip(0, 100)class_b = np.random.normal(70, 15, 30).clip(0, 100)class_c = np.random.normal(80, 8, 30).clip(0, 100)data = [class_a, class_b, class_c]

【图表答案】

【代码答案】

import numpy as npimport matplotlib.pyplot as pltnp.random.seed(42)# 为三个班级生成样本数据class_a = np.random.normal(75, 10, 30).clip(0, 100)class_b = np.random.normal(70, 15, 30).clip(0, 100)class_c = np.random.normal(80, 8, 30).clip(0, 100)# 将数据合并到一个列表中data = [class_a, class_b, class_c]# 创建箱线图fig, ax = plt.subplots(figsize=(10, 6))box_plot = ax.boxplot(data, tick_labels=['Class A', 'Class B', 'Class C'], patch_artist=True)# 自定义箱线图颜色colors = ['lightblue', 'lightgreen', 'lightpink'][box_plot['boxes'][i].set_facecolor(colors[i]) for i in range(len(colors))]# 设置标签和标题ax.set_xlabel('Classes')ax.set_ylabel('Exam Scores')ax.set_title('Comparison of Exam Scores Across Classes')# 添加网格线以提高可读性ax.yaxis.grid(True, linestyle='--', alpha=0.7)# 显示图表plt.tight_layout()plt.show()
这段 Python 脚本创建了一个箱线图,用于比较三个不同班级的考试成绩。
让我们逐步分析代码并解释数据处理和可视化的步骤:
数据生成:
  • 我们使用 NumPy 的随机数生成功能为三个班级创建合成考试成绩。
  • np.random.normal() 函数生成正态分布的随机数。
  • 对于每个班级,我们指定平均分、标准差和学生人数(30 人)。
  • .clip(0, 100) 方法确保所有成绩都在 0 到 100 之间。
数据结构:
  • 每个班级的考试成绩都存储在单独的 NumPy 数组中。
  • 然后将这些数组合并到一个名为 data 的列表中,方便绘图。
创建图表:
  • 我们使用 matplotlib 创建箱线图。
  • fig, ax = plt.subplots(figsize=(10, 6)) 创建一个指定大小的新图形和坐标轴。
  • ax.boxplot() 用于创建箱线图,传入我们的数据列表。
自定义图表:
  • 我们在 boxplot() 中使用标签参数为每个箱设置标签。
  • patch_artist=True 参数允许我们为箱子上色。
  • 我们定义一个颜色列表,并使用列表推导式为每个箱子设置填充颜色。
添加标签和标题:
  • ax.set_xlabel() 和 ax.set_ylabel() 用于标记 x 轴和 y 轴。
  • ax.set_title() 为图表添加标题。
增强可读性:
  • 我们使用 ax.yaxis.grid() 添加水平网格线,以便更容易读取成绩值。
显示图表:
  • plt.tight_layout() 调整图表布局,防止重叠。
  • plt.show() 显示最终图表。
  • 这个箱线图为三个班级的考试成绩分布提供了视觉比较。
  • 每个箱子代表一个班级,显示中位数、四分位数和潜在的异常值。
  • 不同的颜色使人们可以一目了然地区分班级。

【小知识】

  • 箱线图,也称为箱须图,是 John Tukey 在 1970 年作为探索性数据分析的一部分引入的。
  • 在箱线图中,箱子表示四分位距(IQR),包含数据中间的 50%。
  • 箱子内的线表示中位数,而须通常延伸到 IQR 的 1.5 倍。
  • 超出须的点通常被视为异常值,并单独绘制。
  • 箱线图特别适用于比较组间的分布,并识别数据中的偏斜。
  • 虽然这里使用了 matplotlib,但其他 Python 库(如 Seaborn)可以用更少的代码创建箱线图。
  • 在教育数据分析中,箱线图常用于比较不同组(如班级、学校或人口统计类别)的考试成绩。
  • np.random.seed() 函数用于确保随机数生成的可重复性,这对于科学和教育演示至关重要。

最新文章

随机文章