You need to enable JavaScript to run this app. 如何在R中使用ggplot2在同一画布同时绘制月度与日度数据
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中使用ggplot2在同一画布同时绘制月度与日度数据

R 混合日度/月度指标facet绘图解决方案

核心逻辑是将日度指标和月度指标分开处理后再合并绘图,避免月度值重复导致的折线异常:

library(tidyverse)
library(readxl)
library(lubridate)

# 读取原始数据
tab <- read_excel("myjoinedfile.xlsx", sheet="Sheet1")

# 1. 单独处理月度指标sal,每月仅保留1个值
sal_monthly <- tab %>%
  group_by(year, month) %>%
  summarise(
    date = min(date), # 取当月第一天作为绘图的X轴坐标
    sal = unique(sal), # 月度值全月一致直接取唯一值,存在异常值时可替换为mean(sal, na.rm = T)
    .groups = "drop"
  ) %>%
  pivot_longer(cols = sal, names_to = "name", values_to = "value")

# 2. 处理其余日度指标,保留原始日度粒度
daily_data <- tab %>%
  select(-sal) %>%
  pivot_longer(-c(year, day, date, month), names_to = "name", values_to = "value")

# 3. 合并两类数据用于绘图
plot_data <- bind_rows(daily_data, sal_monthly)

# 4. 绘图(删除原代码中多余的`t`字符,建议添加free_y适配不同指标值域)
ggplot(plot_data, aes(x = date, y = value,colour=year)) + 
  geom_line(size=0.75) +
  facet_wrap(name~.,switch = "y",ncol=1, scales = "free_y") +  
  scale_x_date(breaks = seq(as.Date("1991-10-01"),as.Date("1992-09-30"),
    by = "1 month"),date_labels = "%b") 

处理说明:

  • 原问题出现异常折线的原因是sal为月度值,原始数据中每一行(每日记录)都重复了当月的sal值,直接拉长表后相当于每月有数十个重复的sal值对应不同的日度X轴坐标,折线会出现无意义的平直线重叠
  • 单独汇总后的sal数据每月仅保留1个值,和日度指标合并后绘图即可得到正常的facet面板效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:45:04