Skip to content

UrbanInstitute/urbnthemes

Repository files navigation

urbnthemes

Overview

urbnthemes is a set of tools for creating Urban Institute-themed plots and maps in R. The package extends ggplot2 with print and map themes as well as tools that make plotting easier at the Urban Institute.

A comprehensive set of examples is available at the Urban Institute R Users Group website.

Stay up-to-date

Sign up here to stay up-to-date with R package releases and R resources from the Urban Institute. We will not share your information and we will not email more than once per month.

Installation

install.packages("remotes")
remotes::install_github("UrbanInstitute/urbnthemes", build_vignettes = TRUE)

Fonts

The Urban Institute uses Lato font for publications. After installing urbnthemes, submit urbnthemes::lato_test() to see if Lato is imported and registered.

If Lato isn’t imported and registered, install Lato and then submit urbnthemes::lato_import(). If you are on a Windows, you may need to install ghostscript and then submit Sys.setenv(R_GSCMD = "link to the ghostscript .exe") before running urbnthemes::lato_import().

Waffle charts with glyphs require fontawesome. fontawesome_test() and fontawesome_install() are the fontawesome versions of the above functions. Be sure to install fontawesome from here.

Usage

Always load library(urbnthemes) after library(ggplot2) or library(tidyverse).

library(tidyverse)
library(urbnthemes)

set_urbn_defaults(style = "print")

ggplot(data = mtcars, mapping = aes(factor(cyl))) +
  geom_bar() + 
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs(x = "Number of Cylinders",
       y = "Count") +
  remove_ticks() +
  labs(title = "Most Cars Have 8 Cylinders",
       subtitle = "1974 Motor Trend US magazine")

ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) +
  geom_point() +
  scale_x_continuous(expand = expansion(mult = c(0.002, 0)), 
                     limits = c(0, 6),
                     breaks = 0:6) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.002)), 
                     limits = c(0, 40),
                     breaks = 0:8 * 5) +
  labs(x = "Weight (thousands of pounds)",
       y = "City MPG") +
  scatter_grid()

mtcars %>%
  mutate(cyl = paste(cyl, "cylinders")) %>%
  ggplot(aes(x = wt, y = mpg, color = cyl)) +
  geom_point() +
  scale_x_continuous(expand = expansion(mult = c(0.002, 0)), 
                     limits = c(0, 6),
                     breaks = 0:6) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.002)), 
                     limits = c(0, 40),
                     breaks = 0:8 * 5) +
  labs(x = "Weight (thousands of pounds)",
       y = "City MPG") +
  scatter_grid()

library(gapminder)

gapminder %>%
  filter(country %in% c("Australia", "Canada", "New Zealand")) %>%
  mutate(country = factor(country, levels = c("Canada", "Australia", "New Zealand"))) %>%
  ggplot(aes(year, gdpPercap, color = country)) +
  geom_line() +
  scale_x_continuous(expand = expansion(mult = c(0.002, 0)), 
                     breaks = c(1952 + 0:12 * 5), 
                     limits = c(1952, 2007)) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.002)), 
                     breaks = 0:8 * 5000,
                     labels = scales::dollar, 
                     limits = c(0, 40000)) +
  labs(x = "Year",
       y = "Per capita GDP (US dollars)")

txhousing %>%
  filter(city %in% c("Austin","Houston","Dallas","San Antonio","Fort Worth")) %>%
  group_by(city, year) %>%
  summarize(sales = sum(sales)) %>%
  ggplot(aes(x = year, y = sales, fill = city)) +
  geom_area(position = "stack") +
  scale_x_continuous(expand = expansion(mult = c(0, 0)),
                     limits = c(2000, 2015),
                     breaks = 2000 + 0:15) +  
  scale_y_continuous(expand = expansion(mult = c(0, 0.2)), 
                     labels = scales::comma) +
  labs(x = "Year",
       y = "Home sales")
#> `summarise()` has grouped output by 'city'. You can override using the `.groups` argument.

Branding

library(ggplot2)
library(urbnthemes)

set_urbn_defaults()

plot <- ggplot(data = mtcars, mapping = aes(factor(cyl))) +
  geom_bar() + 
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs(x = "Number of Cylinders",
       y = "Count") +
  remove_ticks()

urbn_plot(plot, urbn_logo_text(), ncol = 1, heights = c(30, 1))

Notes and Sources

library(ggplot2)
library(urbnthemes)

set_urbn_defaults()

plot <- ggplot(data = mtcars, mapping = aes(factor(cyl))) +
  geom_bar() + 
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs(x = "Number of Cylinders",
       y = NULL) +
  remove_ticks()

urbn_plot(
  urbn_y_title(string = "Count"),
  plot, 
  urbn_logo_text(), 
  urbn_source(text = "This is a long source. This is a long source. This is a long source. This is a long source. This is a long source. This is a long source. This is a long source. ",
              width = 155),
  urbn_note(text = "This is a long note. This is a long note. This is a long note. This is a long note. This is a long note. This is a long note. This is a long note. This is a long note.",
            width = 155,
            plural = TRUE),
  ncol = 1, 
  heights = c(1, 30, 1.5, 2.5, 2.5)
)

Core themes:

  • set_urbn_defaults()
  • theme_urbn_print()
  • theme_urbn_map()

Formatting functions:

  • urbn_plot()
  • urbn_title()
  • urbn_subtitle()
  • urbn_y_title()
  • urbn_note()
  • urbn_source()
  • urbn_logo_text()
  • scatter_grid()
  • remove_ticks()
  • add_axis()
  • remove_axis()
  • get_legend()
  • remove_legend()
  • urbn_geofacet

Palette functions:

  • palette_urbn_main
  • palette_urbn_diverging
  • palette_urbn_quintile
  • palette_urbn_politics
  • palette_urbn_cyan
  • palette_urbn_gray
  • palette_urbn_yellow
  • palette_urbn_magenta
  • palette_urbn_green
  • palette_urbn_spacegray
  • palette_urbn_red

Utility functions:

  • lato_test()
  • lato_import()
  • fontawesome_test()
  • fontawesome_install()
  • view_palette()

In development:

  • undo_urbn_defaults()
  • save_urbn_print()

Getting help

Contact Aaron R. Williams or Kyle Ueyama with feedback or questions.

Code of conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Releases

No releases published

Packages

No packages published

Languages