It's a bit of a workaround, but I think this answer might help: https://stackoverflow.com/a/58273676/15545685
Applied to your case:
library(tidyverse)
library(ggforce)
dat <- data.frame(
date = seq(as.Date('2024-01-01'),
as.Date('2024-12-31'),
'1 day'),
value = rnorm(366, 10, 3)
)
p0 <- dat |>
ggplot(aes(x = date, y = value)) +
geom_point() +
labs(x = NULL,
y = 'Value') +
theme_bw(base_size = 16) +
scale_x_date(date_labels = '%b %d') +
facet_zoom(xlim = c(as.Date("2024-06-01"), as.Date("2024-06-20")))
p1 <- p0 +
scale_x_date(breaks = seq(as.Date('2024-01-01'),
as.Date('2024-12-31'),
'1 month'),
limits = c(as.Date('2024-01-01'),
as.Date('2024-12-31')),
date_labels = '%b\n%Y')
gp0 <- ggplot_build(p0)
gp1 <- ggplot_build(p1)
k <- gp1$layout$layout$SCALE_X[gp1$layout$layout$name == "x"]
gp1$layout$panel_scales_x[[k]]$limits <- gp1$layout$panel_scales_x[[k]]$range$range
k <- gp1$layout$layout$PANEL[gp1$layout$layout$name == "x"]
gp1$layout$panel_params[[k]] <- gp0$layout$panel_params[[k]]
gt1 <- ggplot_gtable(gp1)
grid::grid.draw(gt1)