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

R语言:将多个DataFrame数据绘制到同一折线图中

解决方案:长格式转换+批量合并+可视化

1. 加载依赖包

先确保安装并加载tidyverse(包含数据处理工具dplyr和可视化工具ggplot2):

install.packages("tidyverse")
library(tidyverse)

2. 处理单个产品数据

定义一个函数,专门提取每个DataFrame中的价格数据并转换为长格式(解决季度列不一致的问题):

process_price_data <- function(df) {
  df %>%
    # 筛选出price对应的行
    filter(Def == "price") %>%
    # 将季度列(以Q开头的列)转为长格式
    pivot_longer(
      cols = starts_with("Q"),
      names_to = "quarter",
      values_to = "price"
    ) %>%
    # 保留需要的列
    select(quarter, price, ID)
}

假设你已经读取了三个产品的DataFrame:apples_df、oranges_df、lemons_df,用函数分别处理:

apples_price <- process_price_data(apples_df)
oranges_price <- process_price_data(oranges_df)
lemons_price <- process_price_data(lemons_df)

3. 合并所有价格数据

用bind_rows合并处理后的数据集,它会自动对齐列,即使不同产品的季度数量不一致也能正常合并:

all_prices <- bind_rows(apples_price, oranges_price, lemons_price)

如果产品数量较多,建议把所有DataFrame放进列表,用map_dfr批量处理并合并,更高效:

# 将所有DataFrame存入列表
df_list <- list(
  apples = apples_df,
  oranges = oranges_df,
  lemons = lemons_df
)

# 批量处理并合并
all_prices <- df_list %>% map_dfr(process_price_data)

4. 绘制折线图

用ggplot绘制各产品的价格走势,按产品ID分组并区分颜色:

ggplot(all_prices, aes(x = quarter, y = price, group = ID, color = ID)) +
  geom_line(linewidth = 1) +  # 绘制折线
  geom_point(size = 2) +      # 绘制数据点
  labs(
    x = "季度",
    y = "价格",
    title = "各产品季度价格走势",
    color = "产品"
  ) +
  theme_minimal()

关键说明

  • 转长格式后,每个产品仅保留有数据的季度,缺失的季度不会出现在数据集中,彻底避免了宽格式合并时的列对齐问题。
  • 如果某个产品的某季度数据是NA(而非没有该列),geom_line默认会跳过该点,折线自动断开;若想忽略NA直接连线,可添加na.rm = TRUE:geom_line(linewidth = 1, na.rm = TRUE)。

内容的提问来源于stack exchange,提问作者Florian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:35:31