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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:57