求助:如何使用R语言创建2019-2021年图书馆月度到馆人数多折线图
解决R语言多折线图绘制问题
嗨,我来帮你搞定这个图书馆到馆人数的多折线图!先梳理下你代码里的几个小问题,再给你修正后的完整流程:
原代码里的几个小错误
- 安装
readxl的语句漏了闭合的引号和括号,正确写法是install.packages("readxl") lapply里的functions是笔误,应该是function- Excel文件路径和文件名有空格/符号错误,比如
"-/Desktop/..."应该改成"~/Desktop/patron stats.xlsx"(~代表你的用户主目录),读取时的文件名也别加多余空格 - ggplot的语法问题:图层之间必须用
+连接,而且aes映射参数有误,分组应该按年份(也就是工作表名称),不是Patron Count
修正后的完整代码
# 安装需要的包(tidyverse已经包含dplyr、tidyr、ggplot2,所以可以简化) install.packages("readxl") install.packages("tidyverse") # 加载库 library(readxl) library(tidyverse) # 导入Excel文件并获取工作表名称 # 注意修改成你实际的文件路径,确保路径正确 file_path <- "~/Desktop/patron stats.xlsx" sht <- excel_sheets(file_path) sht # 将每个工作表读取到列表中,修正function拼写和文件路径 df_list <- lapply(setNames(sht, sht), function(s) { read_excel(file_path, sheet = s) }) # 转换为包含年份(工作表名称)的单个数据框 df <- bind_rows(df_list, .id = "Year") # 把Sheet改成Year更直观 # 处理月份顺序(避免x轴月份乱序):把Month转成因子,按1-12月排序 df <- df %>% mutate(Month = factor(Month, levels = c("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"))) # 如果你的Month是英文的,就改成levels = month.name或者month.abb # 绘制多折线图 ggplot(data = df, aes(x = Month, y = `Patron Count`, group = Year, color = Year)) + geom_line(linewidth = 1) + # 设置线宽让折线更清晰 geom_point(size = 2) + # 设置点的大小 ylab("到馆人数") + # 可以改成中文更直观,或者保留英文"Patron Count" xlab("月份") + theme_minimal() + # 用简洁的主题 labs(title = "2019-2021年图书馆每月到馆人数", color = "年份") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
代码解释
- 数据读取:用
excel_sheets获取所有工作表名称,再用lapply批量读取每个工作表,最后bind_rows合并成一个数据框,并用.id参数添加年份列(把原来的Sheet改成Year更易懂) - 月份排序:把
Month转成因子并指定顺序,这样x轴的月份会按自然顺序排列,不会乱序 - 绘图部分:
aes里用group=Year让每年的数据画成一条折线,color=Year给不同年份的折线分配不同颜色- 用
+连接所有ggplot图层,这是ggplot的核心语法,不能漏掉 - 添加标题、坐标轴标签,旋转x轴标签避免重叠,用
theme_minimal让图表更美观
内容的提问来源于stack exchange,提问作者Gisela Gonzalez
相关产品推荐
相关产品推荐

