r - 如何在不同的行中绘制带有时间和日期的 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 轴标签
解决方案
你可以看看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))
推荐阅读
- ruby-on-rails - Sidekiq + Redistogo(在 Heroku 上) - 达到 ERR 最大客户端数
- amazon-web-services - Terraform如何更改提供者
- shell - 在脚本中使用 awk gensub 的不同结果
- sql-server - SQL Server:varchar 读取 unicode 问题
- ruby-on-rails - 导入带有关联的 CSV
- python - python folium 地图设置(防止缩放和平移)
- python - Django ORM 和 Flask-Sqlalchemy 在使用过滤器上有什么区别?
- java - 在 IntelliJ 2018 的 Java 代码编辑器中,在语句结束分号之前强制一个空格
- java - Java插入排序:“相同”的变量得到不同的结果
- javascript - Angular 6 神秘的堆栈跟踪:globalZoneAwareCallback