如何将ggplot图表导出至按筛选拆分的各Excel工作簿新工作表
给分国家的Excel工作簿添加对应ggplot图表工作表
嘿,我知道你已经把数据按国家拆分导出到单独的Excel文件了,现在要给每个文件加个带对应国家折线图的新工作表对吧?下面是一套完整的解决方案,基于你现有的代码修改而来,直接就能跑起来:
先确保装了需要的包
首先得把用到的包装上,没装的话运行这行:
install.packages(c("tidyverse", "xlsx"))
然后加载包:
library(tidyverse) library(xlsx)
完整可运行代码
# 创建数据框(和你原来的一样) df = data.frame(Year = c(2018,2019,2020,2018,2019,2020,2018,2019,2020), Country = c("Germany","Germany","Germany", "Japan", "Japan", "Japan", "Thailand", "Thailand", "Thailand"), Count = c(17, 15, 60, 23, 25, 60, 50, 18, 31)) # 按国家拆分数据框 split_df <- split(df, df$Country) # 遍历每个国家,导出数据+新增图表工作表 lapply(split_df, function(country_data) { # 获取当前国家名称,用来命名Excel文件 country_name <- unique(country_data$Country) excel_path <- paste0(country_name, ".xlsx") # 第一步:把数据写入Excel的"数据"工作表(不存在就创建文件,存在就覆盖原有数据工作表) xlsx::write.xlsx(country_data, file = excel_path, sheetName = "数据", col.names = TRUE, row.names = FALSE, append = FALSE, showNA = TRUE, password = "test") # 第二步:绘制对应国家的折线图 plot_obj <- country_data %>% ggplot(aes(x = Year, y = Count, color = Country)) + geom_line(size = 1) + # 让线条粗一点更清晰 labs(title = paste0(country_name, "年度Count趋势"), x = "年份", y = "Count数值") + theme_minimal() # 用清爽的主题 # 临时把图表存成PNG(xlsx包需要通过图片文件插入图表) temp_plot_path <- paste0(tempfile(), ".png") ggsave(temp_plot_path, plot = plot_obj, width = 6, height = 4, dpi = 300) # 第三步:打开Excel文件,新增图表工作表并插入图片 wb <- loadWorkbook(excel_path, password = "test") chart_sheet <- createSheet(wb, sheetName = "趋势图表") # 把图片插入到工作表的第2行第2列位置 addPicture(temp_plot_path, chart_sheet, scale = 1, startRow = 2, startColumn = 2) # 保存修改后的工作簿 saveWorkbook(wb, excel_path, password = "test") # 删除临时图片,避免占空间 file.remove(temp_plot_path) })
代码唠唠
- 我给图表加了标题和坐标轴标签,这样看的时候一目了然;线条也调粗了点,更易读。
- 临时图片是自动生成又自动删除的,不会在你的文件夹里留下垃圾。
- 如果遇到Java相关的报错(毕竟xlsx依赖Java),可以换成
openxlsx包,这个不需要Java环境,代码会更简洁——比如不用临时存图片,直接用openxlsx::insertPlot()插ggplot对象就行。
内容的提问来源于stack exchange,提问作者realbeast91
相关产品推荐
相关产品推荐

