R GGplot循环生成学生成绩图时X轴同时展示编号与日期的问题
问题解决方法
错误原因
你之前直接传入全局数据集的date字段作为X轴标签,所有学生的图表都会复用全局数据前4行(即首个学生)的日期,没有针对单个学生的独立数据生成对应标签。
实现代码
你只需要在每次循环生成图表时,基于当前学生的子数据集拼接测试编号和日期作为自定义标签,传入X轴的scale参数即可,修改后代码如下:
plot_list = list() for (var in unique(all_students$students)) { # 提取当前学生的所有成绩数据 student_df <- all_students[all_students$students == var, ] # 拼接X轴刻度标签:测试编号+换行+日期,也可替换\n为空格/斜杠改为单行显示 x_tick_labels <- paste0(student_df$test_number, "\n", student_df$date) p = ggplot(student_df, aes(x=test_number, y=grade, group=Annotation)) + geom_line() + geom_point() + ggtitle(var) + scale_shape(guide = FALSE) + xlab("Test Date + Number") + # 自定义X轴刻度与标签 scale_x_continuous( breaks = student_df$test_number, labels = x_tick_labels ) # 若X轴标签过长可加下方代码调整角度避免重叠 # + theme(axis.text.x = element_text(angle = 30, hjust = 1)) plot_list[[var]] = p } pdf("all_students.pdf") for (var in unique(all_students$students)) { print(plot_list[[var]]) } dev.off()
注意事项
如果你的test_number字段存储为因子类型,只需将上述代码中的scale_x_continuous替换为scale_x_discrete即可,其余逻辑保持不变。
内容的提问来源于stack exchange,提问作者Blaze9
相关产品推荐
相关产品推荐

