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

如何使用ggplot绘制仅显示时间(不含日期)且按工作日分别展示的CO2浓度折线图

解决方案:拆分日期与时间,按工作日分组绘图

要实现「x轴仅显示时间、每个工作日对应一条折线」的需求,我们需要对数据做简单的拆分处理,再调整ggplot的分组逻辑。以下是完整的修改步骤和代码:

步骤1:加载依赖包并预处理数据

首先我们需要把dateTime拆分为工作日(日期)和当日时间两个独立字段,这样就能用工作日来区分不同折线,用当日时间作为x轴。这里我们用lubridate和hms包来更便捷地处理时间数据:

# 加载必要的包
library(tidyverse)
library(lubridate)
library(hms)

# 预处理数据:拆分日期和时间
co2data <- co2data %>% 
  mutate(
    dateTime = as.POSIXct(dateTime),
    workday = as.factor(date(dateTime)),  # 提取工作日作为分组依据
    time_of_day = as_hms(dateTime)        # 提取当日时间(仅保留时/分/秒,无日期)
  )

步骤2:绘制分组折线图

在ggplot中,我们通过group = workday指定按工作日分组,同时用color = workday让不同工作日的折线显示不同颜色,x轴使用我们提取的time_of_day,并设置x轴仅显示时间格式:

co2data %>% 
  ggplot(aes(x = time_of_day, y = ppm, group = workday, color = workday)) +
  geom_line(linewidth = 1) +  # 设置折线粗细,提升可读性
  labs(
    title = "CO2 Concentration During Work Hours",
    y = "CO2 Concentration (ppm)",
    x = "Time of Day",
    color = "Workday"  # 图例标题
  ) +
  theme_minimal() +
  scale_x_time(
    labels = scales::time_format("%H:%M"),  # x轴仅显示小时:分钟
    breaks = co2data$time_of_day            # 每个采集时间点都显示刻度
  )

代码逻辑说明

  • 拆分dateTime为workday和time_of_day:解决了原代码中x轴包含日期、无法区分工作日折线的问题。
  • group = workday:告诉ggplot每个工作日的数据要单独绘制一条折线。
  • scale_x_time():强制x轴按时间格式渲染,并且只显示小时和分钟,完全隐藏日期信息。

如果不需要额外安装hms包,也可以用format(dateTime, "%H:%M")把时间转为字符串作为x轴,但用as_hms()的优势是x轴会作为连续变量处理,刻度排列更符合时间的逻辑顺序。

内容的提问来源于stack exchange,提问作者D. Studer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:57:36