如何修改R数据绘图脚本,通过标识列表自动替换固定前缀免手动替换
批量处理实现方案
可以通过封装函数+遍历标识列表的方式实现批量处理,无需手动替换脚本内容,稳定性更高。
1. 加载依赖包(仅需运行一次)
library("ggplot2") library("scales") library("zoo") library("lubridate") library("grid") library("gridExtra") library("gtable") library("labeling")
2. 封装绘图逻辑为自定义函数
process_and_plot <- function(id_tag) { # 动态读取对应标识的CSV文件 sum_plot <- read.csv(paste0("F:/br/RF/", id_tag, "_SK.csv"), header=TRUE, sep=",", dec=".", quote="") # 动态生成求和列名 sum_col <- paste0(id_tag, "_SK.SUM") sum_plot[[sum_col]] <- rowSums(sum_plot[,-1]) sum_plot$date.hour <- ymd_hms(sum_plot$filenames) sum_plot <- as.data.frame(sum_plot) # 绘图逻辑,动态列名用.data[[ ]]调用避免语法错误 plotted <- ggplot(data=sum_plot, aes(x=date.hour, y=.data[[sum_col]])) + geom_line(color="blue") + scale_y_continuous(labels=comma) + scale_x_datetime(position="top", labels=date_format("%F"), date_breaks="1 month") + theme( axis.title.x=element_blank(), plot.title = element_text(hjust = 0.5, size = 12, margin=margin(0,0,10,0)), panel.background=element_rect(fill='white'), panel.grid.major = element_line(colour = "black", linetype=3), panel.grid.minor = element_blank(), axis.ticks.x=element_blank() ) + labs( x=paste("4WRM, ", format(sum_plot$date.hour[1], '%Y-%m-%d %T %Z')," to ", sum_plot$date.hour[nrow(sum_plot)]), y="PPM" ) + ggtitle(paste0(id_tag, " PON")) + geom_vline(xintercept=as.numeric(ymd_hms("2019-07-12 06:00:00")), linetype=2, color="red") + geom_vline(xintercept=as.numeric(ymd_hms("2019-09-16 06:00:00")), linetype=2, color="red") + geom_line(aes(y = rollmean(.data[[sum_col]], 336, na.pad=TRUE)), color = "#111111") # 动态保存图片 png(filename=paste0("F:/br/", id_tag, ".SK.Data.Table.plot.png"), width=30, height=5, units="in", res=600) grobz <- ggplotGrob(plotted) grobz.plot <- arrangeGrob(grobs = list(rbind(grobz, size = "last")), ncol = 1) grid.draw(grobz.plot) dev.off() }
3. 定义标识列表批量运行
# 按需求修改此处的标识列表即可 list_data <- c("XXF","XXGF","XXGT") # 遍历所有标识自动处理 for (id in list_data) { process_and_plot(id) }
内容的提问来源于stack exchange,提问作者cap
相关产品推荐
相关产品推荐

