如何修复ggplot中的宽高比?

时间:2011-08-14 12:36:31

标签: r ggplot2

我正在尝试调整图表以适应我的文档,但是我很难将绘制的图表视为正方形。

示例:

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

虽然x和y的限制相同,但结果中的图不是方形。我猜R是封闭式面板5x5“但不关心实际的图表大小。

我如何取消我的图表?

3 个答案:

答案 0 :(得分:92)

ggplot中,保留绘图宽高比的机制是在绘图中添加coord_fixed()图层。无论实际边界框的形状如何,这都将保留绘图本身的纵横比。

(我还建议你使用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()

enter image description here

答案 1 :(得分:63)

确保特定的宽高比,例如:对于square,请使用theme(aspect.ratio=1)

Andrie的答案并未给出全部图片,因为该示例提供了可能不自然的数据,其中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()

然后情节看起来像这样:

enter image description here

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

  

ratio纵横比,表示为y / x

这样可以使情节符合:

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

enter image description here

但是您需要使用变量或绘图区域的限制来调整它(并非所有限制都可以被像这些示例那样的整数整除)。

答案 2 :(得分:8)

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

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)

导致: