如何解决ggplot的纵横比?

我试图调整一个情节,以适应我的文件,但我很难让绘制的图是一个正方形。

例:

pdf(file = "./out.pdf", width = 5, height = 5) p <- ggplot(mydata, aes(x = col1, y = col2)) print(p) aux <- dev.off() 

尽pipex和y的限制是相同的,但结果中的图不是方形的。 我想R使封闭面板5×5“,但不关心实际的图表大小。

我怎样才能摆脱我的图表?

ggplot中,保留图的高宽比的机制是向图上添加一个coord_fixed()图层。 无论实际的边界框的形状如何,这将保持graphics本身的高宽比。

(我也build议你用ggsave把结果图保存为pdf / png / etc,而不是pdf(); print(p); dev.off()序列。)

 library(ggplot2) df <- data.frame( x = runif(100, 0, 5), y = runif(100, 0, 5)) ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed() 

在这里输入图像说明

为了确保一个特定的长宽比例如square,使用theme(aspect.ratio=1)

安德里的答案并没有给出完整的画面,因为这个例子提供了x的范围等于y的范围的非自然数据。 但是,如果数据是:

 df <- data.frame( x = runif(100, 0, 50), y = runif(100, 0, 5)) ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed() 

那么情节将如下所示:

在这里输入图像说明

coord_fixed()函数也有一个参数来调整轴的比例:

ratio长宽比,表示为y / x

所以这个情节可以用

 ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10) 

在这里输入图像说明

但是你需要用variables或者绘图区域的限制来调整它(不是所有的限制都可以像这些例子中的整数一样被整除)。

为了完整起见,如果您想考虑非常不同的轴限制:

 df <- data.frame( x = runif(100, 0, 5000), y = runif(100, 0, 5)) ratio.display <- 4/3 ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y)) plot <- ggplot(df, aes(x=x, y=y)) + geom_point() plot + coord_fixed(ratio.values / ratio.display) 

导致: