在R中将多列累积数据转换为常规格式并逐列绘图的实现方法
R实现方案
1 依赖包加载
使用tidyverse套件即可完成全流程操作,包含数据处理和绘图所需的所有功能:
library(tidyverse)
2 累积数据转逐期增量
核心逻辑是对每列Box数据做一阶差分,用当前行值减去上一行值得到增量,lag函数的default参数可控制第一行增量的取值,默认设为0时第一行增量等于原始累积值:
# 你可以替换下方测试数据构造代码,直接读入你的实际数据 set.seed(123) df <- tibble( Sno = 1:100, across(1:50, ~cumsum(sample(1:20, 100, replace = T)), .names = "Box{.col}") ) # 累积值转增量 df_inc <- df %>% mutate(across(starts_with("Box"), ~.x - lag(.x, default = 0)))
若不需要第一行的增量值,删除
default = 0即可,差分后第一行会自动设为NA,绘图时会自动跳过该值。
3 批量生成学术风格图表
遍历所有Box列单独绘图,默认输出符合期刊要求的矢量PDF格式,也可按需调整为PNG等格式:
# 提取所有Box列的列名 box_cols <- str_subset(colnames(df_inc), "^Box") # 批量绘图保存 walk(box_cols, function(col) { # 构造单组绘图数据 plot_df <- df_inc %>% select(Sno, all_of(col)) colnames(plot_df) <- c("Sno", "value") # 生成学术风格折线图 p <- ggplot(plot_df, aes(x = Sno, y = value)) + geom_line(color = "#2c3e50", linewidth = 0.8) + labs( x = "序列号Sno", y = "日度增量", title = paste0(col, " 日度增量变化趋势") ) + theme_classic() + # 无网格的经典学术主题 theme( text = element_text(family = "serif", size = 12), # 衬线字体适配多数期刊要求 plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12) ) # 保存图片,300DPI满足印刷要求 ggsave( filename = paste0(col, "_增量趋势图.pdf"), plot = p, width = 8, height = 5, dpi = 300 ) })
- 如需叠加散点,可在
geom_line()后加geom_point(size = 1.5) - 可根据期刊格式要求调整字体、颜色、图表尺寸参数
内容的提问来源于stack exchange,提问作者Marble
相关产品推荐
相关产品推荐

