我有几个数据集共享相同的x轴,但其y轴相差几个数量级。因此,y轴上的标签尺寸可变,当使用ggplot绘图时,x轴会变得不对齐。为了使我的图表具有可比性,我希望所有x轴在最终图中具有相同的长度。这是facetting and grids can be used(or other options too)的一个相当简单的过程。但是,此过程意味着聚合所有绘图并将它们发送到相同的png或eps文件。我有几个原因(超出了帖子的范围)将每个情节存储在自己的png中。因此,为了使图表具有可比性,我将不得不找到一种方法来强制它们在图像的左边界和标记y轴的线之间具有相同的空间。
我的猜测是"填充"带有空格的标签,所以它们都有相同数量的字符可以解决问题,但它没有成功。我也试过改变point.margin无济于事。有人知道如何实现这个目标吗?
library(stringr)
library(ggplot2)
y1 <- seq(1,100,by=1)
y2 <- seq(1,1000000,by=10000)
x <- seq(1,100,by=1)
data <- data.frame(x,y1,y2)
m1 <- ggplot(data=data,aes(x=x,y=y1)) + geom_line() +
scale_y_continuous(labels=function(label) str_pad(label,width=20,side="right"))
m11 <- m1 + theme_bw() + theme(panel.border = element_blank(), panel.grid.major= element_blank(), panel.grid.minor= element_blank(),axis.line=element_line(colour="black"),axis.text.x=element_text(size=12),axis.text.y=element_text(size=12))
m2 <- ggplot(data=data,aes(x=x,y=y2)) + geom_line() +
scale_y_continuous(labels=function(label) str_pad(label,width=20,side="right"))
m21 <- m2 + theme_bw() + theme(panel.border = element_blank(), panel.grid.major= element_blank(), panel.grid.minor= element_blank(),axis.line=element_line(colour="black"),axis.text.x=element_text(size=12),axis.text.y=element_text(size=12))
png("m1.png")
m11
dev.off()
png("m2.png")
m21
dev.off()
答案 0 :(得分:0)
我找到了解决问题的解决方案。
首先,将ggplot对象转换为gtables。
g1 <- ggplot_gtable(ggplot_build(m11))
g2 <- ggplot_gtable(ggplot_build(m21))
然后,找到最大宽度并使用它,以替换其余图中的宽度。
maxWidth = unit.pmax(g1$widths[2:3], g2$widths[2:3])
g1$widths[2:3] <- maxWidth
g2$widths[2:3] <- maxWidth
最后,使用grid.draw将您的绘图打印到您的png设备中。
png("m1.png")
grid.draw(g1)
dev.off()
png("m2.png")
grid.draw(g2)
dev.off()