You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的ggplot中为X轴添加多列数据并绘制学生成绩折线图

学生成绩折线图绘制方案

步骤1:转换数据格式

ggplot2 要求数据为长格式(每一行对应一个观测值),而你当前的数据是宽格式(每个阶段占一列),所以第一步要做数据转换。我们用tidyverse包(包含ggplot2和数据转换工具)来完成:

# 加载工具包
library(tidyverse)

# 构建你的示例数据框(实际使用时替换成你自己的notas数据)
notas <- tibble(
  names = c("Ana", "Beth", "Rick", "Zoe"),
  grade_one = c(5.7, 3.5, 9.0, 8.0),
  grade_two = c(6.3, 5.0, 9.0, 8.7),
  grade_three = c(4.0, 7.0, 9.0, 8.0),
  grade_four = c(5.0, 8.0, 9.0, 9.0)
)

# 转换为长格式
notas_long <- notas %>%
  pivot_longer(
    cols = starts_with("grade_"),  # 选中所有以grade_开头的列
    names_to = "grade_period",     # 新列:存储学习阶段(如grade_one)
    values_to = "score"            # 新列:对应阶段的分数
  )

转换后的数据结构示例:

namesgrade_periodscore
Anagrade_one5.7
Anagrade_two6.3
Anagrade_three4.0
.........

步骤2:绘制折线图

用转换后的长数据,即可轻松画出每个学生的成绩变化折线:

# 基础折线图
ggplot(data = notas_long, aes(x = grade_period, y = score, color = names, group = names)) +
  geom_line(linewidth = 1) +  # 设置线宽,让线条更清晰
  geom_point(size = 2) +      # 添加数据点,方便查看每个阶段的具体分数
  labs(
    x = "学习阶段",
    y = "分数",
    title = "学生成绩变化趋势对比",
    color = "学生姓名"
  ) +
  theme_minimal()  # 选用简洁的主题风格

可选:设置随机颜色

如果需要给每个学生分配随机颜色,可以添加scale_color_manual来实现:

# 生成随机颜色向量
random_colors <- sample(colors(), n_distinct(notas_long$names))

# 带随机颜色的折线图
ggplot(data = notas_long, aes(x = grade_period, y = score, color = names, group = names)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_color_manual(values = random_colors) +  # 应用随机颜色
  labs(
    x = "学习阶段",
    y = "分数",
    title = "学生成绩变化趋势对比",
    color = "学生姓名"
  ) +
  theme_minimal()

关键说明

你之前的代码失败原因是直接用宽数据绘图,x=grade_one+grade_two的写法完全错误——我们需要把每个学习阶段作为X轴的独立类别,而不是把分数相加。转换为长格式是解决这类问题的核心步骤。

内容的提问来源于stack exchange,提问作者Daniel C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:51:36