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