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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:45:34