R语言 如何使用POSIXct强制执行月初刻度标签?

cgvd09ve  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(193)

我的(最小可重复性)代码显示了scale_x_datetime的两种可能性。
如果不使用lables说明符,我得到的刻度标签格式为yyyy-mm-dd。我不希望刻度标签中包含年份,因为年份用于标题中的开始和结束日期。
然而,当我使用labels说明符时,tick标签显示该月的最后一天。
我如何在每月的第一天获得没有年份的刻度标签。
谢谢你。

library(ggplot2)
library(scales)

mydata <- read.table(header = TRUE, text = "
            dates values
            2022-12-03 5
            2023-03-02 0
            ")

plottib <- tibble(mydata) %>% 
  mutate(dates = as.POSIXct(dates,format="%Y-%m-%d") )  

start_date <- min(mydata$dates) 
end_date <- max(mydata$dates) 

gp <- ggplot( plottib , aes( x=dates, y=values )) +
  geom_point() +
  labs(title = paste("From", start_date, 'to', end_date, sep=' ') ) +
  
  scale_x_datetime(date_breaks = "1 month")   `a`

 # scale_x_datetime(date_breaks = "1 month", labels = date_format("%d %b") ) 

gp
0vvn1miw

0vvn1miw1#

当您将"日期"转换为"POSIXct"时,您必须指定时区:

plottib <- tibble(mydata) %>% 
  mutate(dates = as.POSIXct(dates, format="%Y-%m-%d", tz="UTC") )

这导致:

ecr0jaav

ecr0jaav2#

谢谢你“爱德华”的建议,我试过了,但运气不好。我觉得有义务深入挖掘,直到找到解决办法。
下面的版本确实解决了这个问题。我不明白为什么一个版本在月底给出滴答声,而另一个版本在月初给出滴答声。

library(ggplot2)
library(scales)

mydata <- read.table(header = TRUE, text = "
            dates values
            2022-12-03 5
            2023-03-02 0
            ")

# This gives tick marks at the END of the month 
# plottib <- tibble(mydata) %>%
#   mutate(dates = as.POSIXct(dates, format="%Y-%m-%d"), tz="UTC" )

# This gives tick marks at START of the month
plottib <- tibble(
  dates = as.POSIXct(mydata$dates, format="%Y-%m-%d", tz="UTC" ),
  values = mydata$values)

gp <- ggplot( plottib , aes( x=dates, y=values )) +
  geom_point() +
  scale_x_datetime(date_breaks = "1 month", labels = date_format("%d %b") ) 

gp

相关问题