R语言 ggplot刻度仅适用于日期时间(使用POSIX ct日期时间时)

8yparm6h  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(92)

在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))可预测地失败。

kupeojn6

kupeojn61#

对于您的第二个问题,当处理日期或日期时间或时间时,您还必须将限制和/或中断设置为日期、日期时间或时间,即使用limits = as_hms(c("8:00:00", "22:00:00")

library(tidyverse)
library(lubridate)
library(hms)

ggplot(test) + geom_point(aes(x = x, y = hms_dates)) +
  scale_y_time(limits = as_hms(c("8:00:00", "22:00:00")))
#> Warning: Removed 1 rows containing missing values (`geom_point()`).

关于你的第一个问题。TBMK这不能通过scale_..._datetime来实现。如果你只想显示你的日期的时间部分,那么转换成has对象是最简单的方法。你当然可以通过date_labels参数设置显示为轴文本的单位,例如date_labels="%H:%M:%S"只显示一天中的时间。但是,由于您的dates变量仍然是一个日期时间,因此刻度、中断和限制仍将反映这一点,即您仅更改标签的格式,并且对于示例数据,您最终会得到一个轴,该轴显示每个中断的相同时间,即一天的开始。

ggplot(test) + geom_point(aes(x = x, y = dates)) +
  scale_y_datetime(date_labels = "%H:%M:%S")

相关问题