R markdown:减少pdf输出文档中两个图之间的空间 [英] R markdown: Reduce the space between two plots in pdf output document

查看:54
本文介绍了R markdown:减少pdf输出文档中两个图之间的空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • 目标:R markdown:构建一个 DinA4 pdf 页面,左上角有一个矩形和两个图.
  • 问题:绘制矩形后,下一个绘图距离很远,中间有很大的空白.
  • 期望的输出:热图应该紧跟在带有一两条白线的矩形之后.

我猜问题是矩形的绘制.在这里,我需要一些帮助.谢谢.

I guess the problem is the drawing of the rectangle. Here I need some help. Thank you.

---
output:
  pdf_document
documentclass: article
classoption: a4paper
geometry: margin=1cm

subparagraph: yes
header-includes: |
  \usepackage{titlesec}
  \titlespacing{\title}{0pt}{\parskip}{-\parskip}

title: "Example of Title to Body Text"
subtitle: Subtitle Places Here
---

\vspace{-5truemm}
\pagenumbering{gobble}

#``` {r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(draw)
library(ggplot2)
library(dplyr)
# ```

#```{r rectangle}
drawBox(x =2, y = 3.5, width = 2.5, height = 1)
#```

#```{r heatmap}
df <- data.frame(
  test_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
              3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4),
  test_nr = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 
              1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2),
  region = c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", 
             "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", 
             "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D"),
  test_value = c(3, 1, 2, 2, 2, 1, 2, 2, 3, 2, 2, 3, 2, 1, 2, 2, 1, 2, 3, 
                 4, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 2, 2, 2, 99, 99, 3, 3, 3, 3)
)

# named vector for heatmap
cols <-  c("1" = "green", 
           "2" = "darkgreen", 
           "3" = "orange", 
           "4" = "red",
           "99" = "black")
labels_legend <- c("1" = "very good", 
                   "2" = "good", 
                   "3" = "not so good", 
                   "4" = "bad", 
                   "99" = "NA")

df <- df %>% 
  filter(test_id==1)

ggplot(
  df, 
  aes(region, test_nr)) +
  geom_tile(aes(fill= factor (test_value))) +
  geom_text(aes(label = test_value), size = 10, color = "white") + # text in tiles
  scale_colour_manual(
    values = cols, 
    breaks = c("1", "2", "3", "4", "99"),
    labels = labels_legend,
    aesthetics = c("colour", "fill")
  ) +
  theme(text = element_text(size = 14)) + # this will change all text size
  labs(title =  "Test (Individual heatmap)", x = "Region", y = "Event") +
  labs(fill = "Test") +
  coord_fixed(ratio=1, clip="on") +
  theme(axis.text.y = element_text(face = "bold", size = 12)) +
  theme(axis.text.x = element_text(angle = 0, face = "bold", size = 12)) +
  theme(axis.line = element_line(colour = "darkblue", 
                                 size = 1, linetype = "solid")
  )
# ```

## Information

推荐答案

您可以使用 subfigure 环境并排显示多个图,但您可能不想将矩形放置在与热图相同的主标题下.

You can use the subfigure environment to display multiple plots side by side, though you may not want to place the rectangle under the same main caption as the heatmap.

---
output:
  pdf_document:
    extra_dependencies: "subfig"
documentclass: article
classoption: a4paper
geometry: margin=1cm

subparagraph: yes
header-includes: |
  \usepackage{titlesec}
  \titlespacing{\title}{0pt}{\parskip}{-\parskip}

title: "Example of Title to Body Text"
subtitle: Subtitle Places Here
---

\vspace{-5truemm}
\pagenumbering{gobble}

``` {r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(draw)
library(ggplot2)
library(dplyr)
```

```{r rectangle}
drawBox(x =2, y = 3.5, width = 2.5, height = 1)
```

```{r heatmap-data}
df <- data.frame(
  test_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
              3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4),
  test_nr = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 
              1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2),
  region = c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", 
             "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", 
             "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D"),
  test_value = c(3, 1, 2, 2, 2, 1, 2, 2, 3, 2, 2, 3, 2, 1, 2, 2, 1, 2, 3, 
                 4, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 2, 2, 2, 99, 99, 3, 3, 3, 3)
)

# named vector for heatmap
cols <-  c("1" = "green", 
           "2" = "darkgreen", 
           "3" = "orange", 
           "4" = "red",
           "99" = "black")
labels_legend <- c("1" = "very good", 
                   "2" = "good", 
                   "3" = "not so good", 
                   "4" = "bad", 
                   "99" = "NA")

df <- df %>% 
  filter(test_id==1)
```

```{r heatmap, fig.show="hold", fig.cap='Rectangle and Heatmap', fig.subcap=c('LEFT', 'RIGHT'), out.width='50%', fig.align = "center"}
drawBox(x =2, y = 3.5, width = 2.5, height = 1)

ggplot(
  df, 
  aes(region, test_nr)
  ) +
  geom_tile(aes(fill= factor (test_value))) +
  geom_text(aes(label = test_value), size = 10, color = "white") + # text in tiles
  scale_colour_manual(
    values = cols, 
    breaks = c("1", "2", "3", "4", "99"),
    labels = labels_legend,
    aesthetics = c("colour", "fill")
  ) +
  theme(text = element_text(size = 14)) + # this will change all text size
  labs(title =  "Test (Individual heatmap)", x = "Region", y = "Event") +
  labs(fill = "Test") +
  coord_fixed(ratio=1, clip="on") +
  theme(axis.text.y = element_text(face = "bold", size = 12)) +
  theme(axis.text.x = element_text(angle = 0, face = "bold", size = 12)) +
  theme(
    axis.line = element_line(
      colour = "darkblue", 
      size = 1, linetype = "solid"
      )
  )
```

## Information

这篇关于R markdown:减少pdf输出文档中两个图之间的空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆