Rmarkdown 裁剪 ggplots 周围的空白区域

Dri*_*ies 5 r ggplot2 r-markdown

尽管我在这里使用水平条形图作为示例,但这本身并不是问题。一般问题是如何处理使用后在 rmarkdown 中 ggplots 周围创建的空白

+坐标_固定(比率=...)

为了减少条形图使用的空间,特别是在因子较少的情况下,我更喜欢水平条形图,其中我使用 coord_fixed(ratio=...) 来使条形的宽度和长度之间具有合理的比率。

绘图本身看起来像我想要的那样(请参见下面的第一个示例),但它周围有很多空白,我尝试通过在 knit-header 中使用 Fig.height = ... 来删除它。正如下一个示例所示,结果并不理想。

library(ggplot2)
library(ggstance)
library(dplyr)

X <- data.frame(X = sample(c("A", "B"), 30, replace = TRUE))
X <- X %>% group_by(X) %>% summarise(n = n())
ggplot(X, aes(y = X, x = n))+
   geom_barh(stat = "identity")+
   coord_fixed(ratio = 1)+
   ggtitle("blub")
Run Code Online (Sandbox Code Playgroud)

在 rmarkdown 中使用它,我使用了 x = 3 ;x = 1 ; x=0.5:

```{r,fig.height = x}

# see code above
```
Run Code Online (Sandbox Code Playgroud)

这导致:

图.height=3

在此输入图像描述

图高度=1

在此输入图像描述

图高度=0.5

在此输入图像描述

我希望它能做什么:

  • 裁剪白色边缘
  • 同时保持绘图(绘图+(轴)标题)面积本身不变

后者显然不会发生,因为绘图区域变得更窄并且标题被移动到绘图内部。

我不知道解决方案是在 ggplot 内部还是在knitr 内部找到。最重要的是,理想的解决方案应该能够轻松实现自动化,以便在循环内使用(使解决方案适应不断变化的因素数量)。

GGa*_*mba 3

您可以将参数传递给fig.widthfig.heightchunk 选项。您只需在评估该块之前计算它们:

---
output: html_document
---

```{r, message=FALSE}
library(ggplot2)
library(ggstance)
library(dplyr)

X <- data.frame(X = sample(c("A", "B"), 30, replace = TRUE))
X <- X %>% group_by(X) %>% summarise(n = n())

hei <- length(X$X) + 1
len <- max(X$n) + 2

```

Text before the plot
```{r, fig.height=hei, fig.width=len, echo=FALSE}

ggplot(X, aes(y = X, x = n))+
  geom_barh(stat = "identity")+
  coord_fixed(ratio = 1)+
  ggtitle("blub") +
  theme(plot.background = element_rect(fill = 'red'))

```

Text after the plot

```{r, message=FALSE}

X <- data.frame(X = sample(c("A", "B", "C"), 30, replace = TRUE))
X <- X %>% group_by(X) %>% summarise(n = n())

hei <- length(X$X) + 1
len <- max(X$n) + 2

```
Another plot
```{r, fig.height=hei, fig.width=len, echo=FALSE}

ggplot(X, aes(y = X, x = n))+
  geom_barh(stat = "identity")+
  coord_fixed(ratio = 1)+
  ggtitle("blub") +
  theme(plot.background = element_rect(fill = 'red'))

```
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述