利用 Python 可视化技术创建比较成绩变化的图表:用颜色标记分数的增加/减少

仅凭数字很难比较学生期中和期末成绩的变化。但是 可视化如下图所示,你可以直观地了解成绩的升降。

파이썬 시각화로 생성한 성적 변화 비교 그래프
(由 Python 可视化生成的成绩变化比较图)

在本帖中,我们将使用 Python"(《世界人权宣言》) matplotlib使用 比较期中和期末成绩变化的图表具有以下特点

  • 如果得分是 上升时为绿色, 秋天的红色来显示线条和文本。
  • 等级随时间的变化整齐

什么是成绩变化图表?

成绩变化图是显示特定时间点之间分数变化的可视化图表。 每个学生的 期中和期末考试成绩用一条线表示,并随着分数的变化显示不同的颜色,以便更清晰地显示数据。

图表功能

  • 红色:如果分数下降
  • 绿色如果分数增加
  • 左侧和右侧 姓名和分数使其更加直观。

Python 代码示例

以下是 matplotlib以实施等级变化图。

完整代码

import matplotlib.pyplot as plt

# 设置学生姓名和年级数据
students = ['Tom'、'Richard'、'Anna'、'Emily'、'Grace'] #
midterm_scores = [75, 70, 65, 60, 45] # 期中考试成绩
final_scores = [55, 40, 75, 70, 65] # 期末考试成绩

创建并调整 # 图形的大小
fig, ax = plt.subplots(figsize=(10, 6)) # 设置图表大小
ax.set_title("Student Exam Scores", fontsize=15) # 设置图表标题

显示 # 期中考试分数和姓名(左侧--设置垂直虚线左侧的间距)
ax.scatter([1] * len(midterm_scores), midterm_scores, color='red', s=50, zorder=3)
for i, txt in enumerate(midterm_scores):
    color = 'green' if final_scores[i] > midterm_scores[i] else 'red' # 绿色代表成绩上升,红色代表成绩下降
    ax.text(0.75, midterm_scores[i], f"{students[i]} ({txt})", fontsize=10, color=colour, va='center', ha='right') # 在左侧显示姓名和分数

# 显示期末考试分数和姓名(右侧--设置垂直虚线右侧的间距)
ax.scatter([2] * len(final_scores), final_scores, color='green', s=50, zorder=3)
for i, txt in enumerate(final_scores):
    color = 'green' if final_scores[i] > midterm_scores[i] else 'red' # 绿色代表成绩上升,红色代表成绩下降
    ax.text(2.25, final_scores[i], f"{students[i]} ({txt})", fontsize=10, color=colour, va='center', ha='left') # 在右侧显示姓名和分数

# 在期中考试和期末考试分数之间画一条连接线
for i in range(len(students)):
    color = 'green' if final_scores[i] > midterm_scores[i] else 'red' # 绿色代表成绩上升,红色代表成绩下降
    ax.plot([1, 2], [midterm_scores[i], final_scores[i]], color=colour, linewidth=2, zorder=2) # 用直线连接两点

# 添加一条垂直虚线(突出显示期中考试和期末考试的位置)
ax.axvline(x=1, color='grey', linestyle='--', linewidth=1) # 期中考试垂直虚线
ax.axvline(x=2, color='gray', linestyle='--', linewidth=1) # 期末考试垂直虚线

设置 # X 轴
ax.set_xticks([1, 2])
ax.set_xticklabels(["Midterm", "Final"], fontsize=12, fontweight='bold') 设置 # X 轴标签

删除 # y 轴并缩放
ax.yaxis.set_visible(False) 移除 # Y 轴
ax.set_yticks([]) # 移除 Y 轴刻度线

# 移除成绩变化比较图表的边框
ax.spines['left'].set_visible(False) # 移除左侧边框
ax.spines['right'].set_visible(False) # 移除右侧边框
ax.spines['top'].set_visible(False) # 移除顶部边框
ax.spines['bottom'].set_visible(False) # 移除下边框

输出比较 # 等级变化的图表
plt.show()

代码简介

성적 변화 비교 그래프 생성 프로세스

1. 数据设置

  • 将学生姓名、期中和期末考试成绩保存到列表中。

2. 显示期中/期末考试成绩

  • 期中考试:点 x=1并在垂直虚线左侧显示姓名和分数。
  • 期末考试:点 x=2并在垂直虚线右侧显示姓名和分数。

3. 连接分数变化线

  • plot()将分数用线连接起来、 绿色崛起, 向下是红色将它们分开。

4. 添加一条垂直虚线

  • ax.axvline()以突出期中和期末考试的地点。

5. 删除 Y 轴和不必要的元素

  • 移除 Y 轴和缩放比例,创建更简洁的图表。

结果图特征

  • 左侧显示的是期中考试分数和略微偏离垂直虚线的姓名。
  • 显示您的期末考试分数和姓名。
  • 分数增加意味着 绿色线条和文字摔倒是 红线和文字相隔
  • 不必要的 Y 轴和边框,使图表看起来更简洁、更美观。

杠杆作用和规模

这种可视化不仅显示了等级变化,还显示了 销售数据、项目进度 等等 用于可视化两个时间点之间的变化你可以调整颜色和标签位置可以帮助你获得更直观的效果。

总结

现在我们可以利用 Python 创建一个 图表显示期中和期末成绩的变化,一目了然您的数据。试用代码并将其应用到您自己的数据中!

有些 Python 可视化效果很独特,比如这张比较成绩变化的图表、 睡眠模式分析和 Python 可视化:利用数据促进健康睡眠 看看这篇文章。你会发现它很有趣!

# 代码说明

1. 导入库

import matplotlib.pyplot as plt  
  • matplotlib.pyplot:用于数据可视化的 Python 库。
  • 一个包含所有绘图功能的模块。

2. 设置学生姓名和成绩数据

students = ['汤姆'、'理查德'、'安娜'、'艾米丽'、'格蕾丝'] #
期中考试成绩 = [75, 70, 65, 60, 45] # 期中考试成绩
final_scores = [55, 40, 75, 70, 65] # 期末考试成绩  
  • 学生:每个学生的姓名清单。
  • 期中考试成绩:学生的期中考试成绩。
  • 最终得分学生的期末考试成绩。

3. 创建图形并设置大小

fig, ax = plt.subplots(figsize=(10, 6))
ax.set_title("Student Exam Scores", fontsize=15)  
  • plt.subplots(figsize=(10, 6))创建一个 10 宽 6 长的图形区域。
  • ax.set_title()标题:设置图表顶部的标题。
    • fontsize=15字体大小:将字体大小设置为 15。

4. 显示期中考试分数和姓名

ax.scatter([1] * len(midterm_scores), midterm_scores, color='red', s=50, zorder=3)  
  • ax.scatter():用圆点显示期中考试分数。
    • [1] * len(期中考试分数)标注位置 x=1 的所有点。
    • 期中考试成绩设置 y 轴的位置为每个学生的期中考试成绩。
    • color='red':将点的颜色设置为红色。
    • s=50将点的大小设置为 50。
    • zorder=3设置在直线上绘制的点。
for i, txt in enumerate(midterm_scores):
    color = '绿色' if final_scores[i] > midterm_scores[i] else '红色
    ax.text(0.75, midterm_scores[i], f"{students[i]} ({txt})", fontsize=10, color=color, va='center', ha='right')  
  • for i, txt in enumerate(midterm_scores)重复每个学生的期中考试分数和姓名。
  • 颜色状况:
    • 如果期末考试成绩高于期中考试成绩,则 绿色否则 红色将其标记为 "是"。
  • ax.text():在圆点左侧显示文字(学生姓名和分数)。
    • 0.75:垂直虚线左侧的位置(x=1)。
    • 期中考试分数[i]:将文字的 y 位置与每个学生的分数对齐。
    • f"{students[i]} ({txt})":以字符串形式显示学生姓名和分数。
    • ha='right':文本右对齐。
    • va='center':将文字置于点的垂直中心。

5. 显示期末考试分数和姓名

ax.scatter([2] * len(final_scores), final_scores, color='green', s=50, zorder=3)  
  • ax.scatter():用圆点显示期末考试分数。
    • [2] * len(final_scores)标注位置 x=2 的所有点。
    • 最终得分Y:将 Y 轴的位置设置为每个学生的期末考试分数。
    • color='绿色:将点的颜色设置为绿色。
for i, txt in enumerate(final_scores):
    color = "绿色" if final_scores[i] > midterm_scores[i] else "红色
    ax.text(2.25, final_scores[i], f"{students[i]} ({txt})", fontsize=10, color=color, va='center', ha='left')  
  • for i, txt in enumerate(final_scores)重复每个学生的期末考试分数和姓名。
  • 颜色状况:
    • 如果期末考试成绩高于期中考试成绩,则 绿色否则 红色将其标记为 "是"。
  • ax.text():在圆点右侧显示文字(学生姓名和分数)。
    • 2.25:垂直虚线右侧的位置(x=2)。
    • 最终得分[i]:将文字的 y 位置与每个学生的分数对齐。
    • ha='left'左对齐:文本左对齐。
    • va='center':将文字置于点的垂直中心。

6.连接分数变化线

for i in range(len(students)):
    colour="绿色" if final_scores[i] > midterm_scores[i] else="红色"。
    ax.plot([1, 2], [midterm_scores[i], final_scores[i]], color=colour, linewidth=2, zorder=2)  
  • for i in range(len(students))将每个学生的成绩变化用线连接起来。
  • 颜色状况得分增加时 绿色当比分落后时 红色
  • ax.plot()用直线连接两点。
    • [1, 2]:X 轴位置(期中 → 期末)
    • [期中分数[i],期末分数[i]]:将 y 轴位置设置为期中和期末考试分数。
    • 线宽=2:将线条的粗细设置为 2。

7. 添加一条垂直虚线

ax.axvline(x=1, color='grey', linestyle='--', linewidth=1)
ax.axvline(x=2, color='gray', linestyle='--', linewidth=1)  
  • ax.axvline()在 x 轴的特定位置绘制垂直虚线。
    • x=1文件:在中期位置添加虚线
    • x=2注意:在期末考试地点添加虚线
    • color='gray':将虚线颜色设置为灰色。
    • linestyle='--':设置虚线。
    • linewidth=1将虚线的粗细设置为 1。

8.设置 X 轴

ax.set_xticks([1, 2])
ax.set_xticklabels(["Midterm", "Final"], fontsize=12, fontweight='bold')  
  • set_xticks([1, 2])在 x 轴上添加刻度。
  • set_xticklabels():将标尺标签设置为 "期中考试""最后"

9. 删除 Y 轴和边框

ax.yaxis.set_visible(False)
ax.set_yticks([])

ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)  
  • 移除 Y 轴:
    • ax.yaxis.set_visible(False)使 Y 轴不可见。
    • ax.set_yticks([])删除 Y 轴刻度。
  • 删除边界:
    • spines['left'].set_visible(False)删除左边界
    • 刺['右']删除右边界
    • 刺['顶部']删除顶部边框
    • 刺['底部']删除底部边框

10. 打印图表

plt.show()  
  • plt.show()打印:将图形打印到屏幕上。

类似文章