在ggplot 2中,我有一个关于将POSIX日期时间转换为轴中的时间的适当尺度的问题。
library(tidyverse)
library(lubridate)
library(hms)
library(patchwork)
test <- tibble(
dates = c(ymd_hms("2022-01-01 6:00:00"),
ymd_hms("2023-01-01 19:00:00")),
x = c(1, 2),
hms_dates = as_hms(dates)
)
plot1 <- ggplot(test) + geom_point(aes(x = x, y = dates)) +
scale_y_time()
plot2 <- ggplot(test) + geom_point(aes(x = x, y = hms_dates)) +
scale_y_time()
plot1 + plot2
1.图1的y轴包括日期和时间,但图2只显示一天中的时间。这就是我想要的!我想生成像图像一样的图2,而不必使用hms::as_hms方法。这似乎暗示了一些我无法发现的scale_y_datetime(或类似)选项。我欢迎建议。
1.是否有人提供了一个示例来说明如何使用scale_*_time中的limits选项,或者(参见问题#1)如何使用scale_y_datetime中指定一天中小时数的limits,例如.. limits(c(8,22))可预测地失败。
1条答案
按热度按时间kupeojn61#
对于您的第二个问题,当处理日期或日期时间或时间时,您还必须将限制和/或中断设置为日期、日期时间或时间,即使用
limits = as_hms(c("8:00:00", "22:00:00")
:关于你的第一个问题。TBMK这不能通过
scale_..._datetime
来实现。如果你只想显示你的日期的时间部分,那么转换成has
对象是最简单的方法。你当然可以通过date_labels
参数设置显示为轴文本的单位,例如date_labels="%H:%M:%S"
只显示一天中的时间。但是,由于您的dates
变量仍然是一个日期时间,因此刻度、中断和限制仍将反映这一点,即您仅更改标签的格式,并且对于示例数据,您最终会得到一个轴,该轴显示每个中断的相同时间,即一天的开始。