The {unhcrthemes}
package provides tools to create {ggplot2}
visualizations that adhere to the United Nations High Commissioner for Refugees (UNHCR) data visualization guidelines.
One of the main functions, theme_unhcr
, allows for the easy application of UNHCR theme to your {ggplot2}
graphics.
theme_unhcr
The theme_unhcr
function comes with various parameters to customize your plot:
font_family
: Sets the base font family, default is “Lato”.font_size
: The base font size in points, default is 12.plot_title_size
: Adjusts the plot title size relative to the base font size.plot_title_margin
: Sets the bottom margin of the plot title.subtitle_size
: Sets the font size for subtitles.subtitle_margin
: Sets the bottom margin for subtitles.strip_text_size
: Adjusts the facet label font size.strip_text_face
: Sets the font face for facet labels, default is “bold”.strip_text_just
: Determines the justification for facet labels.caption_size
: Sets the font size for captions.caption_margin
: Sets the top margin for captions.axis_text
: Toggles the axis text on or off.axis_text_size
: Sets the font size for axis text.axis_title
: Toggles the axis title on or off.axis_title_size
: Sets the font size for axis titles.axis
: Toggles the axis on or off.axis_ticks
: Toggles the axis ticks on or off.grid
: Controls the display of grid lines.legend
: Toggles the legend on or off.legend_text_size
: Sets the font size for legend text.legend_title
: Toggles the legend title on or off.legend_title_size
: Sets the font size for legend titles.plot_margin
: Sets the margin around the plot.plot_background
: Sets the background color of the plot.void
: If TRUE
, removes all grid lines, ticks, and axes.After loading the {unhcrthemes}
package, you can apply the theme to any {ggplot2}
chart, by simply adding theme_unhcr
at your call. For example:
# Load packages
library(ggplot2)
library(unhcrthemes)
# Create some data
data.frame(
df <-date = factor(rep(2010:2020, 2)),
val = c(
10.2, 10.2, 10.2, 11.5, 14,
15.8, 17, 19.5, 20.5, 24.5, 20.6,
4.9, 4.9, 4.9, 5.5, 5.5, 5.6,
5.6, 5.7, 5.7, 5.8, 5.9
),set = rep(c("Set 1", "Set 2"), each = 11)
)
# Base plot with theme_unhcr()
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2010-2020",
subtitle = "My subtitle",
x = "date",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) theme_unhcr()
The theme comes with some default settings, but you can customize most of it by adding parameters to the function call, as we will explore below.
The grid
parameter controls the display of both major and minor grid lines in your plot. By default, major grid lines are visible and minor ones are hidden.
Using grid = "XY"
adds both major X and Y grid lines, grid = "X"
adds only major X grid lines, grid = "Y"
adds only major Y grid lines, and grid = FALSE
removes all grid lines. You can add minor grid lines by using lowercase "xy"
, "x"
or "y"
. For example, let’s keep only the major Y grid lines:
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2010-2020",
subtitle = "My subtitle",
x = "date",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) theme_unhcr(
grid = "Y" # Only major Y grid lines
)
Unsurprisingly, the axis represents the axis lines. However, it also includes different axis elements such as the axis title, axis text, and axis ticks.
To control the visibility of axis lines, you can use the axis
parameter in the theme_unhcr
function. By default, this parameter is set to FALSE
, which turns off all the axis lines. Using axis = "XY"
(or axis = TRUE
) adds both X and Y axis, axis = "X"
adds only the X axis, axis = "Y"
adds only the Y axis, and axis = FALSE
removes all axis elements. For example, let’s add only the X axis:
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2010-2020",
subtitle = "My subtitle",
x = "date",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) theme_unhcr(
grid = "Y",
axis = "X" # Only X axis
)
Not quite the result we expected! This is because {ggplot2}
comes, by default, with some expansion around the axis to create some room. To remove this extra space, you can use the expand
argument in the scale_x_*
or scale_y_*
function.
Modify the axis expansion:
In this example, we will set the expand
argument to expansion(c(0, 0.01))
for the y axis to remove the unwanted space, effectively “expanding” the axis by removing the space at the axis origin and adding a small padding at the other end.
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2010-2020",
subtitle = "My subtitle",
x = "date",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) scale_y_continuous(
expand = expansion(c(0, 0.01)) # Remove axis expansion
+
) theme_unhcr(
grid = "Y",
axis = "X"
)
To control the visibility of axis titles and text, you can use the axis_title
and axis_text
parameters in the theme_unhcr
function. By default, these parameters are set to TRUE
, which turns on all the axis titles and text. Using axis_title = FALSE
removes both X and Y axis titles, axis_title = "X"
adds only the X axis title, axis_title = "Y"
adds only the Y axis title, and axis_title = TRUE
adds all axis titles. Similarly, axis_text = TRUE
adds both X and Y axis text, axis_text = "X"
adds only the X axis text, axis_text = "Y"
adds only the Y axis text, and axis_text = FALSE
removes all axis text. For example, let’s keep only the Y axis title:
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2010-2020",
subtitle = "My subtitle",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) scale_y_continuous(
expand = expansion(c(0, 0.01))
+
) theme_unhcr(
grid = "Y",
axis = "X",
axis_title = "Y" # Only Y axis title
)
Even if axis ticks aren’t part of the UNHCR data visualization guidelines, they can sometimes be useful. To control the visibility of axis ticks, you can use the axis_ticks
parameter in the theme_unhcr
function. By default, this parameter is set to FALSE
, which turns off all the axis ticks. Using axis_ticks = TRUE
adds both X and Y axis ticks, axis_ticks = "X"
adds only the X axis ticks, axis_ticks = "Y"
adds only the Y axis ticks, and axis_ticks = FALSE
removes all axis ticks.
Like all the chart elements, the different text elements, such as the plot title, subtitle, caption, and more, can be controlled using the theme_unhcr
function. We encourage you, not to touch any of these parameters, as they are part of the UNHCR branding and should be used as is. However, you can still adjust the font size, font family, margin or justification of each of these elements using, for example, the plot_title_size
, plot_title_margin
, etc. parameters.
On top of the theme_unhcr
parameters, the {unhcrthemes}
package natively incorporates the {ggtext}
package for advanced text rendering in the title, subtitle and caption components. To showcase this, you can use the {ggtext}
functionalities to include styled text directly in your plots.
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
# Add some HTML style to the title
title = "My title including <span style='color:#0072BC;'>highlight color</span> | 2010-2020",
# Automatic wrapping of long text
subtitle = "My really long subtitle that will cover more than one line and that will be automatically wrapped thanks to ggtext so I don't have to manually put a line break",
y = "values",
# Line break in the caption, use <br> instead of \n
caption = "Note: As it's HTML text the line break symbol is not '\\n'<br>Source: UNHCR, the UN Refugee Agency"
+
) scale_y_continuous(
expand = expansion(c(0, 0.01))
+
) theme_unhcr(
grid = "Y",
axis = "X",
axis_title = "Y"
)
Text labels added with geom_text
will also display using the recommended font and style.
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) # Add geom_text
geom_text(aes(label = scales::number_format(accuracy = 0.1)(val)),
position = position_stack(vjust = 0.5, reverse = TRUE),
show.legend = FALSE
+
) labs(
title = "My title including <span style='color:#0072BC;'>highlight color</span> | 2010-2020",
subtitle = "My really subtitle that will cover more than one line and that will be automatically wrapped thanks to ggtext so I don't have to manually put a line break",
y = "values",
caption = "Note: As it's HTML text the line break symbol is not '\\n'<br>Source: UNHCR, the UN Refugee Agency"
+
) scale_y_continuous(
expand = expansion(c(0, 0.01))
+
) theme_unhcr(
grid = "Y",
axis = "X",
axis_title = "Y"
)
The {unhcrthemes}
package also comes with the UNHCR color palettes, which can be used in your plots. Use the display_unhcr_all()
function to show all the available palettes. These palettes can be used directly in your plots using the scale
functions. For example, let’s use the default palette in the scale_fill_unhcr_d()
function:
ggplot(
data = df,
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title including <span style='color:#0072BC;'>highlight color</span> | 2010-2020",
subtitle = "My really subtitle that will cover more than one line and that will be automatically wrapped thanks to ggtext so I don't have to manually put a line break",
y = "values",
caption = "Note: As it's HTML text the line break symbol is not '\\n'<br>Source: UNHCR, the UN Refugee Agency"
+
) scale_y_continuous(
expand = expansion(c(0, 0.01))
+
) scale_fill_unhcr_d() +
theme_unhcr(
grid = "Y",
axis = "X",
axis_title = "Y"
)
To simplify the creation of pie/donut charts or maps, the theme_unhcr
function comes with a void
parameter. When set to TRUE
, this parameter removes all grid lines, ticks, and axes. For example, let’s create a pie chart:
ggplot(
data = dplyr::filter(df, date == 2020),
aes(x = date, y = val, fill = set)
+
) geom_col(
position = position_stack(reverse = TRUE),
width = 0.8
+
) labs(
title = "My title | 2020",
subtitle = "My subtitle",
y = "values",
caption = "Source: UNHCR, the UN Refugee Agency"
+
) scale_fill_unhcr_d() +
coord_polar(
theta = "y",
direction = -1
+
) theme_unhcr(
void = TRUE # Remove all grid lines, ticks, and axes
)
With {unhcrthemes}
, creating UNHCR-compliant visualizations in R
is straightforward, providing a consistent and branded look for your graphics.
For more information on each parameter and usage, visit the function documentation page and the UNHCR Data Visualization Platform