如何在R中使用scale_x_datetime设置时间序列坐标轴范围
解决ggplot2中scale_x_datetime设置范围后仍显示超出日期的问题
你遇到的问题根源在于ggplot2默认会给坐标轴范围添加少量扩展空间(padding),即便设置了limits,也会导致x轴显示超出限制的日期。解决核心是在scale_x_datetime中添加expand = c(0, 0)参数,彻底关闭轴范围的自动扩展。
示例数据
library(ggplot2) library(lubridate) df <- data.frame(matrix(ncol = 2, nrow = 70176)) colnames(df)[1:2] <- c("DateTime","Value") df$DateTime <- seq(ymd_hm('2020-01-01 00:00'),ymd_hm('2021-12-31 23:45'), by = '15 mins') df$Value <- rnorm(70176,100,20)
修改后的有效代码
ggplot(df, aes(x = DateTime, y = Value)) + geom_line() + scale_x_datetime(date_labels = "%b %d %Y", date_breaks = "1 month", limits = c(min(df$DateTime), max(df$DateTime)), expand = c(0, 0)) + # 关键参数:关闭轴范围扩展 labs(x = "", y = "Value") + theme_bw() + theme(panel.grid = element_blank(), text = element_text(size = 16, color = "black"), axis.text.x = element_text(size = 16, color = "black", angle = 90, vjust = 0.5, hjust = 1), axis.text.y = element_text(size = 16, color = 'black'))
原理说明
ggplot2的坐标轴默认配置为expand = c(0.05, 0),即在数据范围基础上额外增加5%的空白区域,这就是导致超出限制日期显示的原因。添加expand = c(0, 0)后,轴范围会严格贴合你设置的limits,不会再显示超出数据范围的日期刻度。
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

