ggplot2日期X轴超出数据范围:如何让轴仅显示至8月?
解决X轴显示超出8月的问题
问题根源在于ggplot的日期轴默认会自动扩展一定范围,搭配date_breaks = "1 month"的设置后,9月的刻度被误包含进来。以下是三种可行的解决方法:
方法1:关闭轴范围自动扩展
在scale_x_date中添加expand = c(0, 0)参数,强制轴范围严格匹配你设定的日期区间:
ggplot(my.df, aes(x= Month)) + geom_line(aes(y= MODEL), color= "blue", size= 1) + geom_line(aes(y= CONTROL), color= "red", size= 1) + scale_y_continuous(limits= c(40, 110), breaks = seq(40,110,10)) + scale_x_date( limits = c(as.Date("2003-06-01"), as.Date("2003-08-31")), date_breaks = "1 month", date_labels = "%b", expand = c(0, 0) # 关闭轴范围的自动扩展 ) + ylab("CIMFD [kg/m²]") + xlab("") + theme_bw() + theme(text= element_text(size= 20)) + theme(axis.text= element_text(size= 25, color= "black")) + theme(legend.position= "none", legend.spacing.x= unit(1, "cm"))
方法2:手动指定轴刻度
直接用数据中已有的月份作为刻度,确保只显示存在的日期:
ggplot(my.df, aes(x= Month)) + geom_line(aes(y= MODEL), color= "blue", size= 1) + geom_line(aes(y= CONTROL), color= "red", size= 1) + scale_y_continuous(limits= c(40, 110), breaks = seq(40,110,10)) + scale_x_date( breaks = my.df$Month, # 手动指定刻度为数据内的月份 date_labels = "%b", limits = c(as.Date("2003-06-01"), as.Date("2003-08-31")) ) + ylab("CIMFD [kg/m²]") + xlab("") + theme_bw() + theme(text= element_text(size= 20)) + theme(axis.text= element_text(size= 25, color= "black")) + theme(legend.position= "none", legend.spacing.x= unit(1, "cm"))
方法3:用coord_cartesian限制显示范围
通过coord_cartesian直接限定绘图的X轴显示区间,不会过滤原始数据,仅控制可视化范围:
ggplot(my.df, aes(x= Month)) + geom_line(aes(y= MODEL), color= "blue", size= 1) + geom_line(aes(y= CONTROL), color= "red", size= 1) + scale_y_continuous(limits= c(40, 110), breaks = seq(40,110,10)) + scale_x_date(date_breaks= "1 month", date_labels = "%b") + coord_cartesian(xlim = c(as.Date("2003-06-01"), as.Date("2003-08-31"))) + ylab("CIMFD [kg/m²]") + xlab("") + theme_bw() + theme(text= element_text(size= 20)) + theme(axis.text= element_text(size= 25, color= "black")) + theme(legend.position= "none", legend.spacing.x= unit(1, "cm"))
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

