R 在单页上放置多个ggplot绘图时,日期标签重叠

R 在单页上放置多个ggplot绘图时,日期标签重叠,r,ggplot2,R,Ggplot2,我试图使用gridExtra包的arrange()函数将多个ggplot2时间序列图放在一个页面上。不幸的是,我发现x轴标签被推到了一起;尽管我的图表只占一页的1/4,但该图显示的x轴标签数似乎与整页图表相同。有更好的方法吗?我不希望手动设置任何点,因为我将处理大量跨越不同日期范围、频率不同的图表 下面是一些复制问题的示例代码 dfm <- data.frame(index=seq(from=as.Date("2000-01-01"), length.out=100, by="year")

我试图使用gridExtra包的arrange()函数将多个ggplot2时间序列图放在一个页面上。不幸的是,我发现x轴标签被推到了一起;尽管我的图表只占一页的1/4,但该图显示的x轴标签数似乎与整页图表相同。有更好的方法吗?我不希望手动设置任何点,因为我将处理大量跨越不同日期范围、频率不同的图表

下面是一些复制问题的示例代码

dfm <- data.frame(index=seq(from=as.Date("2000-01-01"), length.out=100, by="year"), 
    x1=rnorm(100), 
    x2=rnorm(100))
mydata <- melt(dfm, id="index")

pdf("test.pdf")
plot1 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot2 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot3 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot4 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
arrange(plot1, plot2, plot3, plot4, ncol=2, nrow=2)
dev.off()

dfm旋转轴标签

+ opts(axis.text.x=theme_text(angle=45, hjust=1))
请注意,
opts
在当前版本的ggplot2中不推荐使用。此功能已移动到
主题()

或者稀释x轴

+scale_x_datetime(major = "10 years")

要自动移动标签,我认为需要修改arrange()函数(尽管我不确定如何操作)。

我编写此函数是为了返回正确的长轴打断,因为您需要一些设置数量的长轴打断

year.range.major <- function(df, column = "index", n = 5){
  range <- diff(range(df[,column]))
  range.num <- as.numeric(range)
  major = max(pretty((range.num/365)/n))

  return(paste(major,"years"))
}


非常好,我忘记了pretty()函数。谢谢你的解决方案。不幸的是,当我使用不同的日期序列时,我遇到了一系列错误。year.range.major函数本身看起来没有问题,但ggplot崩溃了。例如,如果我将日期序列设置为连续100天,则会出现“级别数不同”错误。如果我使用原始示例并使用POSIXlt日期,则会出现“无法分配长度向量…”错误。当我用POSIXlt对象表示的连续天数重做原始示例时,我得到了一个“seq.int中的错误(r1$year,to$year,by):'to'必须是有限的”错误。
year.range.major <- function(df, column = "index", n = 5){
  range <- diff(range(df[,column]))
  range.num <- as.numeric(range)
  major = max(pretty((range.num/365)/n))

  return(paste(major,"years"))
}
+scale_x_date(major = year.range.major())
+scale_x_date(major = year.range.major(n=3))