Since some time, there’s a wrapper for `ggplot2`

available, bundled in the package `ggformula`

. One nice thing is that in that it plays nicely with the popular R package `mosaic`

. `mosaic`

provides some useful functions for modeling along with a tamed and consistent syntax. In this post, we will discuss some “ornaments”, that is, some details of beautification of a plot. I confess that every one will deem it central, but in some cases in comes in handy to know how to “refine” a plot using `ggformula`

.

Note that this “refinement” is primarily controlled via the function `gf_refine()`

(most stuff), `gf_lab()`

(for labs), and `gf_lims()`

(for axis limits). Themes can be adjusted using `gf_theme()`

.

# Setup

```
library(mosaic)
library(ggthemes)
data(mtcars)
data(diamonds)
```

# Axis labels

```
gf_point(mpg ~ hp, data = mtcars) %>%
gf_labs(x = "Horsepower",
y = "Miles per gallone",
title = "A cool plot")
```

# Axis limits

```
gf_point(mpg ~ hp, data = mtcars) %>%
gf_lims(x = c(100,150))
```

`## Warning: Removed 22 rows containing missing values (geom_point).`

Beware! This function will not only “zoom in” but will also kick out the non-displayed data thereby possibly altering geoms such as boxplot or regression line. To just zoom in, use this function instead:

```
gf_point(mpg ~ hp, data = mtcars) %>%
gf_refine(coord_cartesian(xlim = c(100, 150)))
```

# Axis breaks

```
gf_point(mpg ~ hp, data = mtcars) %>%
gf_refine(scale_x_continuous(breaks = seq(from = 50, to = 400, by = 50)))
```

Basically, `gf_refine()`

takes some scaling functions from ggplot as input, such as `scale_XXX_continuous`

. So check out these functions to get fine control over axis and, more generally, mapping from variables to visuals.

# Axis labels for discrete axes

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_refine(scale_x_discrete(labels = c("manual", "automatic")))
```

As now the x-axis is discrete (as a result of a factor variables on the x-axis), we need to use `scale_XXX_discrete`

this time, where `XXX`

is the x-axis in this example.

# Change theme

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_theme(theme_classic())
```

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_theme(theme_minimal())
```

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_theme(theme_bw())
```

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_theme(theme_void())
```

# Theme packages

There are some packages out there providing additional themes out of the box. One example is the package `ggthemes`

.

```
gf_boxplot(hp ~ factor(am), data = mtcars) %>%
gf_theme(theme_tufte())
```

# Change colors – predefined colors

The package `viridis`

provides a nice color scheme.

Standard colors:

`gf_hex(price ~ carat, data = diamonds)`

```
gf_hex(price ~ carat, data = diamonds) %>%
gf_refine(scale_fill_viridis_c()) %>%
gf_theme(theme_minimal())
```

# Change colors – own color scale

I recommend against using own color schemes, at least not without taking great care.

```
gf_boxplot(hp ~ factor(am),
data = mtcars,
fill = ~ factor(am)) %>%
gf_theme(theme_classic()) %>%
gf_refine(scale_fill_manual(values = c("red", "blue")))
```

Use hex (RGB) color codes instead of the color names:

```
gf_boxplot(hp ~ factor(am),
data = mtcars,
fill = ~ factor(am)) %>%
gf_theme(theme_classic()) %>%
gf_refine(scale_fill_manual(values = c("#00FF11", "#123456"))) %>%
gf_refine(scale_x_discrete(labels = c("Some cars", "some other cars")),
scale_y_continuous(breaks = c(70, 100, 300)))
```