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 内部找到。最重要的是,理想的解决方案应该能够轻松实现自动化,以便在循环内使用(使解决方案适应不断变化的因素数量)。
您可以将参数传递给fig.width和fig.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)
| 归档时间: |
|
| 查看次数: |
3842 次 |
| 最近记录: |