我正在尝试调整绘图大小以适合我的文档,但我很难将绘制的图表变成正方形。
示例:
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",但不关心实际的图表尺寸。
我怎样才能解压我的图表?
在
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()
为了确保特定的纵横比,例如对于正方形,请使用
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()函数还有一个参数来调整轴的比例:
纵横比,表示为 y / xratio
这样绘图就可以与:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
但是您需要根据变量或绘图区域的限制来调整它(并非所有限制都可以像这些示例一样很好地被整数整除)。
为了完整起见: 如果您想考虑非常不同的轴限制:
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)
结果:
我看到这篇文章并想添加更多信息。如果您计划将图像插入 RMD 文档中,则可以从 r 块中处理
aspect.ratio
。根据您的布局,有 3 种方法可以更改图像的纵横比(取决于您的工作流程)。
#1。创建图形时
myPlot <- ggplot(data = iris,
aes(x=Species, y = Sepal.Length)) +
geom_point() +
theme(aspect.ratio = 6.5/11)
#2。使用
ggsave
保存图像时
ggsave("images/plot1.png", myPlot, width=11, height=6.5, dpi=400)
#3。在 rmd 文档本身中。如果您计划使用
officedown
(并创建 docx 作为文档输出),那么我发现 6.5/11 的宽高比与 9.4 的 fig.width
相结合是使用横向页面的最佳选择。
<!---BLOCK_LANDSCAPE_START--->
```{r fig.id="my-fig", fig.cap="", fig.width=9.4, fig.asp = 6.5/11}
myPlot
```
<!---BLOCK_LANDSCAPE_STOP--->
应该注意的是,如果您打算将 ggplot 插入 Rmd 文档中,您可以跳过 #1 和 #2,仅使用选项 #3。
尝试添加
a_r <- 2.5
theme(aspect.ratio = a_r)
这是例子:
ggplot(corr_df_0, aes(x = corr_df_0_sp, y = corr_df_0_sc))+
theme(aspect.ratio=2.5)