simplevis

David Hodge

2021-04-09

library(dplyr)
library(simplevis)

Purpose

simplevis is a package of wrapper functions to make ‘ggplot2’ and ‘leaflet’ visualisation easier and prettier.

simplevis ggplot graph types

simplevis provides the following types of ggplot:

For each ggplot type, 4 functions are available.

  1. A ggplot not coloured or faceted (e.g. ggplot_hbar)
plot_data <- ggplot2::diamonds %>%
  mutate(cut = stringr::str_to_sentence(cut)) %>%
  group_by(cut) %>%
  summarise(average_price = mean(price)) %>%
  mutate(average_price = round(average_price / 1000, 1)) %>%
  mutate(cut = factor(cut, levels = c("Fair", "Good", "Very good", "Premium", "Ideal"))) 

ggplot_hbar(plot_data, average_price, cut,
            title = "Average diamond price by cut", 
            x_title = "Average price ($US thousands)", 
            y_title = "Cut")

  1. A ggplot coloured, but not faceted (e.g. ggplot_hbar_col)
plot_data <- ggplot2::diamonds %>%
  mutate(cut = stringr::str_to_sentence(cut)) %>%
  group_by(cut, clarity) %>%
  summarise(average_price = mean(price)) %>%
  mutate(average_price = round(average_price / 1000, 1))

ggplot_hbar_col(plot_data, average_price, cut, clarity, 
                title = "Average diamond price by cut and clarity", 
                x_title = "Average price ($US thousands)", 
                y_title = "Cut")

  1. A ggplot facetted, but not coloured (e.g. ggplot_hbar_facet)
plot_data <- ggplot2::diamonds %>%
  mutate(cut = stringr::str_to_sentence(cut)) %>%
  group_by(cut, clarity) %>%
  summarise(average_price = mean(price)) %>%
  mutate(average_price = round(average_price / 1000, 1))

ggplot_hbar_facet(plot_data, average_price, cut, clarity,
                  facet_ncol = 4,
                  title = "Average diamond price by cut and clarity", 
                  x_title = "Average price ($US thousands)", 
                  y_title = "Cut")

  1. A ggplot coloured and facetted (e.g. ggplot_hbar_col_facet)
plot_data <- ggplot2::diamonds %>%
  mutate(cut = stringr::str_to_sentence(cut)) %>%
  group_by(cut, clarity, color) %>%
  summarise(average_price = mean(price)) %>%
  mutate(average_price = round(average_price / 1000, 1))

ggplot_hbar_col_facet(plot_data, average_price, color, clarity, cut,
                      title = "Average diamond price by colour, clarity and cut", 
                      x_title = "Average price ($US thousands)", 
                      y_title = "Colour")

These ggplot graphs have been designed that users can convert them easily to html interactive objects by wrapping them in plotly::ggplotly(plot). A customised tooltip can be provided using the text_var argument in simplevis functions with plotly::ggplotly(plot, tooltip = "text"). Automated text columns can be created using the mutate_text function.

plot_data <- storms %>%
  group_by(year) %>%
  summarise(average_wind = round(mean(wind), 2))

plot <- ggplot_vbar(data = plot_data, 
                    x_var = year, 
                    y_var = average_wind, 
                    title = "Average wind speed of Atlantic storms, 1975\u20132015",
                    x_title = "Year",
                    y_title = "Average maximum sustained wind speed (knots)")

plotly::ggplotly(plot) %>% 
  plotly_camera() 

The variable types supported by the different groups of functions are outlined below.

simplevis ggplot maps

simplevis provides simple feature (sf) maps (i.e. maps with point, line or polygon features).

Spatial-temporal array (i.e. stars) maps may be supported in future.

The following functions are available:

These functions work in the same way as the ggplot graph functions, but with the following key differences:

ggplot_sf(example_sf_point, 
          borders = nz, 
          point_size = 0.25,
          title = "Site trends, 2008\u201317",
          title_wrap = 40)

pal <- c("#4575B4", "#D3D3D3", "#D73027")

ggplot_sf_col(example_sf_point, trend_category, 
              borders = nz, 
              point_size = 0.25, 
              pal = pal, 
              title = "Site trends, 2008\u201317",
              title_wrap = 40)

ggplot_sf_facet(example_sf_point, trend_category, 
                borders = nz, 
                point_size = 0.25,
                title = "Site trends, 2008\u201317")

pal <- c("#4575B4", "#D3D3D3", "#D73027")

ggplot_sf_col_facet(example_sf_point, trend_category, trend_category,
                    borders = nz, 
                    point_size = 0.25, 
                    pal = pal,
                    title = "Site trends, 1990\u201317")

simplevis leaflet maps

simplevis provides sf leaflet maps.

These work in the same way as the ggplot map functions, but with no borders arguments.

Spatial-temporal array (i.e. stars) maps may be supported in future.

leaflet_sf(data = example_sf_polygon)
leaflet_sf_col(example_sf_polygon, density, 
               col_method = "bin", 
               col_cuts = c(0, 10, 50, 100, 150, 200, Inf), 
               col_labels_dp = 0,
               title = "Modelled density, 2013-2017")

shiny apps with simplevis

simplevis provides two template shiny apps called template1 and template2. Users can access these functions by using the run_template functions for the applicable app, and then clicking on the download_code button to access a zip file of the code.

run_template("template1") # a graph and table
run_template("template2") # a leaflet map, as well as graph and table

For a simple app, the basic method to create an app is:

Iframing apps

Iframing apps can provide a great experience for users.

Template apps are build to be compatible with one of two approaches to iframing: