【问题标题】:knitr cuts off coord_fixed ggplotknitr 切断 coord_fixed ggplot
【发布时间】:2018-07-07 19:27:19
【问题描述】:

当我使用coord_fixed(ratio = 1) 时,我遇到了一些 knitr 切断部分 ggplot2 图像的行为。

mwe.Rmd

---
title: "mwe"
output: pdf_document
---

```{r}
library(ggplot2)

data <- list(
  x1 = 0:6,
  y1 = 0,
  x2 = rep(0:6, 2),
  y2 = rep(c(0, 1), each = 7) * -1,
  labels = paste("Label", 1:7)
)

g <- ggplot() + geom_text(aes(0:6, 0.75), label = data$labels)

g_unfixed_1 <- g + geom_raster(aes(data$x1, data$y1))
g_fixed_1 <- g_unfixed_1 + coord_fixed(ratio = 1)
g_unfixed_2 <- g + geom_raster(aes(data$x2, data$y2))
g_fixed_2 <- g_unfixed_2 + coord_fixed(ratio = 1)

g_unfixed_1
g_fixed_1
g_unfixed_2
g_fixed_2
```

通过以下调用,我可以看到 g_fixed_1 的上边距与 g_fixed_2 的上边距相比略有截断:

rmarkdown::render("mwe.Rmd", clean = F)

我查看了 knitr 生成的 PDF,图的顶部与g_fixed_1 有点截断:

对比g_fixed_2(两行数据):

【问题讨论】:

  • ......当您不提供an MCVE 时,您将面临投反对票的风险。请做。很多时候,当人们真正试图将其归结为核心问题时,问题就会神奇地自行解决
  • Rmarkdown 文档具有默认的fig.widthfig.height,并且各个块也采用这些参数。这通常默认为 7" x 4"。看起来您已经将 2 个地块塞进了一个 7" x 4" 的空间。由于ggplot 本身并没有设置尺寸,所以图形大小不会调整以适合绘图,因此您需要调整图形大小以适应
  • 对不起,如果不清楚,但我包含了一个最小的完整 Rmd 文档,如果您渲染它并查看生成的 PDF,它会重现效果。我包含的数字是两个单独的图像,当绘图数据仅包含一行时,顶部边距被切断,当数据包含两行或更多行时,顶部边距被切断。当使用 clean = F 选项时,在绘图 PDF 图中也可以看到这一点。
  • 那么您是否尝试设置fig.widthfig.height 参数以适合您的情节?
  • 是的,我尝试设置fig.height = 5,但在绘制coord_fixed(ratio = 1) 绘图时仍然会创建截断图像。

标签: r ggplot2 r-markdown knitr


【解决方案1】:

我有同样的问题并使用以下方法解决了它:

p + scale_y_continous(limits = c(0, max(value)*1.1))

在我的示例中,我正在对一个绘图文件进行循环,所以是这样的:

    for(n in names(tabla)) {
    plots_ms[[n]] +
      scale_y_continuous(limits = c(0, max(plots_ms[[n]]$data$ms)*1.1))
}

【讨论】: