rggplot2chartswaffle

How to reduce (white) margin of a waffle chart?


I' d like to ask some help on how to reduce the amount of white space in a waffle chart using the waffle package in R.

Here's the code:

waffle(table(dat$Age.Group),
       rows=5,
       title="Demographic Age Groups")

Then it shows this:

Demographic Age Groups

When I knitt it, it takes too much space, refer to the picture: enter image description here I'd like to put the text closer to the plot so it won't look awkward, and so I can fit more waffle charts in one page.

I really haven't tried anything, except changing the spacing between the squares, but that doesn't seem to be the problem. I've also looked up similar problems, but I can't find anything addressing to the removing of the margin.

Thank you so much in advance!


Solution

  • The issue is that waffle uses coord_equal under the hood. As a result the size of the plot is not adjusted to fill the size of the output device. If the size of the output device is larger than needed for the plot it is filled up with white space.

    One option would be to set equal=FALSE in waffle. However, in that case you will no longer get squares but rectangles.

    Second option would be to reduce the size or the height of the output device via chunk options, i.e. the size used by Rmarkdown or knitr to render your plot which by default is a 7 x 7 inches. To this end you could set fig.height or as an alternative set the aspect ratio using fig.asp:

    ---
    output: pdf_document
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = FALSE)
    ```
    
    ```{r, include=FALSE}
    library(waffle)
    ```
    
    ```{r, include=FALSE}
    parts <- c(One=80, Two=30, Three=20, Four=10)
    chart <- waffle(parts, rows=8, equal = FALSE)
    ```
    
    ```{r fig.cap="Default"}
    chart + ggplot2::labs(title = "Default")
    ```
    
    ```{r fig.asp=.4, fig.width = 7, fig.cap="Set the aspect ratio"}
    chart + ggplot2::labs(title = "Set the aspect ratio")
    ```
    
    ```{r fig.height = 2.8, fig.width = 7, fig.cap="Reduce the figure height"}
    chart + ggplot2::labs(title = "Reduce the figure height")
    ```
    

    enter image description here