如何解决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)
导致: