---
title: "Useful functions for ggplot2"
author: "Guangchuang Yu\\

        School of Basic Medical Sciences, Southern Medical University"
date: "`r Sys.Date()`"
output:
  prettydoc::html_pretty:
    toc: true
    theme: cayman
    highlight: github
  pdf_document:
    toc: true
vignette: >
  %\VignetteIndexEntry{ggplot utilities}
  %\VignetteEngine{knitr::rmarkdown}
  %\usepackage[utf8]{inputenc}
---

```{r style, echo=FALSE, results="asis", message=FALSE}
knitr::opts_chunk$set(tidy = FALSE,
		   message = FALSE)

library("grid")
library("ggplot2")
library("ggfun")
theme_set(theme_grey())
```


```{r}
library("grid")
library("ggplot2")
library("ggfun")
```

## element_roundrect


<!--
p <- ggplot(mtcars, aes(mpg, disp, color=factor(cyl), size=cyl)) + geom_point()

keybox(p, 'rect')

keybox(p, 'roundrect', gp = gpar(col = '#808080', lty = "dashed"))
-->

The `element_roundrect` works like `element_rect` to draw round rectangle background. We can use it to adjust theme elements, including legend, strip, panel and plot background.

```{r}
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(cols = vars(cyl))
p <- p + theme(strip.background=element_roundrect(fill="grey40", color=NA, r=0.15))
p
```

```{r}
p2 <- ggplot(mtcars, aes(mpg, disp, color=factor(cyl), size=cyl)) +
         geom_point()
p2 + theme(legend.background=element_roundrect(color="#808080", linetype=2))
```




## gglegend



```{r}
p <- ggplot(mtcars, aes(mpg, disp)) + geom_point()
data <- data.frame(colour = c("red",  "blue"), VALUE = c("A", "B"))
gglegend(aes(colour = VALUE, label=VALUE), data, geom_text, p)
```


## set_font

```{r}
d <- data.frame(x=rnorm(10), y=rnorm(10), lab=LETTERS[1:10])
p <- ggplot(d, aes(x, y)) + geom_text(aes(label=lab), size=5)
set_font(p, family="Times", fontface="italic", color='firebrick')
```

## facet_set

Manually specifying facet labels.

```{r fig.width=6, fig.height=3}
library(ggplot2)
library(ggfun)
p <- ggplot(mtcars, aes(disp, drat)) + 
  geom_point() + 
  facet_grid(cols=vars(am), rows=vars(cyl))
p + facet_set(label=c(`0`="Zero", `6`="Six"))
```

Supports labeller:

```{r}
p + facet_set(label=label_both)
```


Add a facet label to a plot. 

```{r}
p + facet_set(label="TEST")
```

With the [ggplotify](https://cran.r-project.org/package=ggplotify) package, we can use `facet_set` to add a facet label to almost any plot in R. 

```{r eval=FALSE}
## please try:

ggplotify::as.ggplot(~barplot(1:10, col=rainbow(10))) +
  facet_set('a barplot in base')
```
