R 在ggplot2中将日期时间格式的记号标签编辑为短版本

R 在ggplot2中将日期时间格式的记号标签编辑为短版本,r,ggplot2,datetime-format,R,Ggplot2,Datetime Format,是否有人知道某个函数/程序包仅在axis中显示一天中的第一个小时时显示日期?i、 例如,我只想显示23:30和00:00的日期,因为它们分别是7月21日和7月22日的第一个日期 我使用了ggplot并将scale_x_datetime设置如下: scale_x_datetime(limits = c(ymd_hm('2020-07-21 23:24', tz = tz_EDT),ymd_hm('2020-07-22 00:25',tz = tz_EDT)), date_breaks = '1

是否有人知道某个函数/程序包仅在axis中显示一天中的第一个小时时显示日期?i、 例如,我只想显示23:30和00:00的日期,因为它们分别是7月21日和7月22日的第一个日期

我使用了ggplot并将scale_x_datetime设置如下:

scale_x_datetime(limits = c(ymd_hm('2020-07-21 23:24',
tz = tz_EDT),ymd_hm('2020-07-22 00:25',tz = tz_EDT)), 
date_breaks = '10 mins',date_labels = '%H:%M\n%b/%d',expand = c(0, 0))
scale_x_datetime(limits = c(ymd_hm('2020-07-21 23:25',
tz = tz_EDT),ymd_hm('2020-07-22 00:25',tz = tz_EDT)),
date_breaks = '10 mins',labels = label_date_short(),expand = c(0, 0))
我尝试了
scales
软件包中的
label\u date\u short
,但我个人不喜欢这种格式。我只想分开时间和日期(日/月/年或年/月/日),而不是时间、日、月和去年

对于上图,代码如下所示:

scale_x_datetime(limits = c(ymd_hm('2020-07-21 23:24',
tz = tz_EDT),ymd_hm('2020-07-22 00:25',tz = tz_EDT)), 
date_breaks = '10 mins',date_labels = '%H:%M\n%b/%d',expand = c(0, 0))
scale_x_datetime(limits = c(ymd_hm('2020-07-21 23:25',
tz = tz_EDT),ymd_hm('2020-07-22 00:25',tz = tz_EDT)),
date_breaks = '10 mins',labels = label_date_short(),expand = c(0, 0))

我的理解是R不能很好地处理时间数据,它更喜欢日期时间数据。这是有意义的,因为每天重复相同的时间,而日期时间不应该重复,因此您不太可能重复时间数据点

无论如何,继续您的示例,您可以手动指定要在x轴上显示的2个值。您需要以日期时间格式指定它们,然后指定希望它们显示的格式(即YYMMDD、YYMMDD-HHMM、HHMM等)

如果您不熟悉签出
?lubridate
,我建议使用
lubridate
包处理日期和(日期)时间,尤其是我们在本例中使用的功能:
?ymd_hm
。基本上,
ymd_hm()
将拼写为“年-月-日-小时-分钟”的字符转换为datetime对象。datetime对象打印为'year-month-day-hour:min:sec',即使我们没有指定任何'seconds'数据,也不用担心,因为默认情况下秒数为零(即分钟顶部)

我制作了一些示例数据,包括您的日期时间范围:

library(tidyverse) # for the tibble() and pipes (%>%) functions 
library(lubridate)

tibble(
  datetime = seq(ymd_hm('2020-07-21 23:24'), ymd_hm('2020-07-22 00:25'), 'min'), # sample datetime sequence, with 1 min intervals
  value = rnorm(62, 1, 1) # random data
) %>%
  {. ->> my_data}
然后,当您构建
ggplot
时,您将使用
scale\u x\u datetime
并手动指定
断点。
中断
需要采用日期时间格式,因此我们再次使用
ymd_hm()
。我们在这里指定完整的日期时间。然后,可以使用
date\u标签
指定要在中显示的轴标签的格式。这就是我们告诉
scale_x_datetime
使用
%H:%M
表示法仅显示小时和分钟的地方(有关日期和时间格式的列表,请参阅)

注意:记号标记的位置将始终为日期时间格式,但标记方式可以更改。例如,可以将时间点重新标记为字符向量,例如:

my_data %>%
  ggplot(aes(datetime, value))+
  geom_line()+
  scale_x_datetime(
    breaks = c(ymd_hm(c('2020-07-21 23:30', '2020-07-22 00:00'))),
    # date_labels = '%H:%M'
    date_labels = c('t1', 't2')
    )