我正在尝试调整图表以适应我的文档,但是我很难将绘制的图表视为正方形。
示例:
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“但不关心实际的图表大小。
我如何取消我的图表?
答案 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()
答案 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()
然后情节看起来像这样:
coord_fixed()函数还有一个参数来调整轴的比例:
ratio
纵横比,表示为y / x
这样可以使情节符合:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
但是您需要使用变量或绘图区域的限制来调整它(并非所有限制都可以被像这些示例那样的整数整除)。
答案 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)
导致: