在R中绘制数据框指定列趋势图及分Set多线图方法咨询
解决方案
首先得把你的宽格式数据转成长格式,这是绘制多组趋势图的关键步骤。先给你可直接运行的R代码,包含数据导入和格式转换:
# 加载需要的包 library(tidyr) library(dplyr) library(ggplot2) # 构建你的数据框 df <- data.frame( ind = rep(0:2, each=4), set = rep(1:4, 3), inst_0 = c(20,34,37,23,34,23,35,23,23,12,12,45), inst_1 = c(30,44,89,45,56,32,69,45,34,44,66,55), inst_2 = c(50,46,78,67,65,45,88,56,55,55,77,88), Inst_3 = c(55,67,80,89,78,55,99,78,55,67,91,31), inst_4 = c(58,89,90,87,77,66,98,89,77,88,44,56), inst_5 = c(60,70,98,89,89,77,57,99,88,90,99,100) ) # 统一列名(原数据里Inst_3首字母大写,先转小写) colnames(df) <- tolower(colnames(df)) # 转长格式:提取inst的序号作为时间轴,数值作为y值 df_long <- df %>% pivot_longer(cols = starts_with("inst_"), names_to = "inst", values_to = "value") %>% mutate(inst_num = as.integer(sub("inst_", "", inst))) # 把inst_0转成整数0,方便绘图
方法一:用ggplot2绘制(推荐)
ggplot2语法直观,自动处理图例、颜色分组,适合快速实现需求:
ggplot(df_long, aes(x = inst_num, y = value)) + # 按ind和set的组合分组,不同组合用不同颜色 geom_line(aes(color = interaction(ind, set), group = interaction(ind, set)), linewidth = 1) + # 可选:添加数据点,更清晰展示每个时间点的数值 geom_point(aes(color = interaction(ind, set))) + # 设置坐标轴标签和标题 labs(x = "观测时刻", y = "数值", color = "分组(ind-set)", title = "各ind-set组合的趋势图") + # 优化主题样式 theme_minimal()
如果想按set分别绘制子图(每个set一个小图,展示该set下所有ind的趋势),可以用facet_wrap:
ggplot(df_long, aes(x = inst_num, y = value)) + geom_line(aes(color = factor(ind), group = ind), linewidth = 1) + geom_point(aes(color = factor(ind))) + labs(x = "观测时刻", y = "数值", color = "ind", title = "按set分组的趋势图") + facet_wrap(~set) + theme_minimal()
方法二:用基础plot函数绘制
基础plot灵活性更强,适合自定义底层细节,但代码相对繁琐:
# 初始化图形,先画第一个组的线条 first_group <- df_long %>% filter(ind == 0, set == 1) plot(first_group$inst_num, first_group$value, type = "l", col = "red", xlab = "观测时刻", ylab = "数值", main = "各ind-set组合的趋势图", xlim = range(df_long$inst_num), ylim = range(df_long$value)) # 循环添加其他所有ind-set组合的线条 groups <- unique(interaction(df_long$ind, df_long$set)) colors <- rainbow(length(groups)) # 生成不同颜色 for (i in 2:length(groups)) { group_data <- df_long %>% filter(interaction(ind, set) == groups[i]) lines(group_data$inst_num, group_data$value, col = colors[i], lwd = 1) } # 添加图例 legend("topright", legend = groups, col = colors, lty = 1, cex = 0.8)
工具选择建议
- 优先选ggplot2:代码可读性强,自动处理图例、颜色、坐标轴范围,修改样式更方便,适合大多数可视化需求。
- 基础plot适合场景:如果需要高度自定义图形元素(比如手动控制每一条线的样式、添加复杂标注),或者不想加载额外包时使用。
内容的提问来源于stack exchange,提问作者Balina
相关产品推荐
相关产品推荐

