首页 > 解决方案 > 如何在不同的行中绘制带有时间和日期的 X 轴?

问题描述

我想创建一个带有两级 X 轴的图表。

我有 2 列,一列带有日期,另一列带有值。

日期示例:

2021-04-13 01:00:00
2021-04-13 01:15:00
2021-04-13 01:30:00
....
2021-04-14 02:00:00
2021-04-14 02:15:00
2021-04-14 02:30:00
...

我想要上层的时间 (01:15:00, 01:30:00, ...),而在下层我想要日期 (2021-04-13, 2021-04-14, . ..)。

我尝试使用这样的示例:

ggplot(df, aes(datetime, value)) +
  geom_line() +
  scale_x_datetime(date_labels=paste(c(rep(" ",11), "%b"), collapse=""), 
               date_breaks="hour", expand=c(0,0)) +
  facet_grid(~ hour(datetime), space="free_x", scales="free_x", switch="x") +
  theme_bw() +
  theme(strip.placement = "outside",
        strip.background = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.border = element_rect(colour="grey70"),
        panel.spacing=unit(0,"cm"))

我正在尝试达到最后示例中的结果: ggplot 折线图中的多行 x 轴标签

标签: rggplot2chartslabelaxis

解决方案


你可以看看ggh4x包裹。多行轴称为嵌套关系。

示例数据

library(tidyverse)
library(ggh4x)

df <- data.frame(datetime = seq(as.POSIXct("2021-04-13"), 
                               as.POSIXct("2021-04-15"), 
                               by=60*180),
                value = sample(1:10, 17, replace=TRUE)) %>%
# create separate columns for date and time
  mutate(date = as_date(datetime),
         time = format(datetime, format = "%H:%M:%S"))

代码

ggplot(df, 
       aes(x = interaction(time, date),
           y = value,
           group = 1)) +
  geom_line() +
  guides(x = "axis_nested") +
  theme(axis.text.x = element_text(angle = 90, 
                                   vjust = 0.5, 
                                   hjust=1))

阴谋 在此处输入图像描述


推荐阅读