R语言 将年份标签放在轴上的年初

mbjcgjjk  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在绘制水位数据图。我试图更改x轴标签,以便将年份标签放置在每年的1月1日,但它似乎将其放置在接近末尾的位置。如何执行此操作?

编辑:

breaks=seq()部分中的问题。最小日期是2014年11月。如何将开始日期时间设置为“2015-01-01 00:00:00”?

当前代码:
plotTitles <- list('Crose Mere'= 'Crose Mere',
                   'Sweat Mere new' = 'Sweat Mere',
                   'Whattall New' = 'Whattall'
                   )

scaleFUN <- function(x) sprintf("%.2f", x)

plotlist_controlSites <- list()

j = 1   # counter for plot title and index
for (datTime in DTW){
  plotName <- names(DTW)[j]
  j = j+1
  plot <- 
    datTime %>%
    ggplot(aes(x=DateTime)) +
    geom_point(aes(y=mAOD), col='grey') +
    geom_smooth(aes(y=mAOD), col='black', se=FALSE, span=0.1, method="loess") +
    theme_classic() +
    labs(y='Water Depth (mAOD)', x=NULL) +
    ggtitle(plotTitles[[plotName]][1]) + 
    scale_x_datetime(
      breaks=seq(min(datTime$DateTime), max(datTime$DateTime), 
                 by= "1 year"), date_labels="%Y",
                 limits = as.POSIXct(c('2015-01-01', '2022-01-01'))) +
    scale_y_continuous(labels=scaleFUN,  limits = c(50, 140)) +
    theme(text=element_text(size=20, family='Calibri Light')) +
    theme(plot.margin = unit(c(1, 1, 1, 1), 'cm')) +
    theme(axis.title.y=element_text(margin=margin(t=0, r=20, b=0, l=0))) +
    theme(axis.title.x=element_text(margin=margin(t=20, r=0, b=0, l=0))) +
    theme(axis.title.y.right=element_text(margin=margin(t=0, r=0, b=0, l=20)))
  
  plotlist_controlSites[[plotName]] <- plot
}
Dataframe 头
structure(list(DateTime = structure(c(1417107600, 1417111200, 
1417114800, 1417118400, 1417122000, 1417125600), class = c("POSIXct", 
"POSIXt"), tzone = ""), siteTemp = c(8.64, 8.65, 8.61, 8.53, 
8.45, 8.38), baroTemp = c(7.34, 6.4, 6.18, 6.21, 6.48, 6.8), 
    mAOD = c(NA, 72.5069999999999, 72.0069999999999, 71.7069999999999, 
    72.2070000000001, 72.3069999999998)), row.names = 22062:22067, class = "data.frame")
电流输出

这是情节的一个片段。基本上标签就像一年后。所以在它说2022的地方,那是2022年的结束,应该说2023年。

如果我将标签更改为'%m-%Y'的形式,您可以看到它放置标签的位置。

jk9hmnmh

jk9hmnmh1#

如果没有看到datTime$DateTime的范围,很难说,但我的猜测是,min(datTime$DateTime)不是今年1月的第一个,但更接近年底。
因此,您可以使用以下代码段:

library(lubridate)
# ...
+ scale_x_datetime(
      breaks = seq(update(min(datTime$DateTime), month = 1L, day = 1L),
                   max(datTime$DateTime), 
                   by = "1 year"), 
      date_labels = "%Y",
      limits = as.POSIXct(c("2015-01-01", "2022-01-01")))

为了证实我的理论,看看

seq(min(datTime$DateTime), max(datTime$DateTime), by= "1 year")

你会发现休息是在年底而不是年初。

相关问题