在降价中使用长数字

时间:2018-06-27 15:16:05

标签: r ggplot2 markdown knitr

我正在降价报告中显示长数字。

因为它们使用ggplot2::facet_wrap,所以它们很长,因此它们的高度取决于数据,该数据不是恒定的。

我可以设置块的figure.height参数,但是它是固定的,我的报告看起来很糟糕。他们有办法解决吗?

示例:

---
title: "title"
author: "author"
date: '`r Sys.Date()`'
output: html_document
---

```{r, figure.height=40}
library(dplyr)
library(ggplot2)
iris %>%
  mutate_at("Sepal.Length",cut, 5) %>%
  mutate_at("Sepal.Width",cut,2) %>%
  group_by_at(c(1,2,5)) %>%
  summarize_at("Petal.Length",mean) %>%
  ggplot(aes(Species, Petal.Length)) +
  geom_col() +
  facet_wrap(Sepal.Length ~ Sepal.Width,ncol=2)
```

1 个答案:

答案 0 :(得分:0)

要遵循n * single_height的想法:您可以使用块选项eval.after,以便在其余块之后对fig.widthfig.height选项进行评估进行评估,然后使用ggplot_build拉开ggplot对象并确定构面中使用的行数和列数。

例如:

---
author: "author"
date: '`r Sys.Date()`'
output: html_document
---

```{r setup}
library(dplyr)
library(ggplot2) 
library(knitr)

FACET_HEIGHT = 3.4
FACET_WIDTH  = 5

opts_chunk$set(out.width = "80%",
               out.height = "80%",
               eval.after = c("fig.height", "fig.width"))
```

For the example we'll have one basic plot to which we will set different facets.
```{r}
g <- 
  iris %>%
  mutate_at("Sepal.Length",cut, 5) %>%
  mutate_at("Sepal.Width",cut,2) %>%
  group_by_at(c(1,2,5)) %>%
  summarize_at("Petal.Length",mean) %>%
  ggplot(aes(Species, Petal.Length)) +
  geom_col()
```

A graphic with two columns
```{r fig1, fig.height = FACET_HEIGHT * max(ggplot_build(g1)$layout$layout$ROW), fig.width = FACET_WIDTH * max(ggplot_build(g1)$layout$layout$COL)}
g1 <- g + facet_wrap(Sepal.Length ~ Sepal.Width, ncol = 2)
g1
```


A graphic with two rows
```{r fig2, fig.height = FACET_HEIGHT * max(ggplot_build(g2)$layout$layout$ROW), fig.width = FACET_WIDTH * max(ggplot_build(g2)$layout$layout$COL)}
g2 <- g + facet_wrap(Sepal.Length ~ Sepal.Width, nrow = 2)
g2
```

生成的html的屏幕截图为:

enter image description here

需要对图像的宽度和高度进行一些微调,但这应该是一个很好的起点。