Getting Started with BFHtheme

Introduction

BFHtheme streamlines the process of producing ggplot2 graphics that follow the visual identity for Bispebjerg og Frederiksberg Hospital and Region Hovedstaden. The package bundles branded themes, colour palettes, scales, and workflow helpers that keep your plots on-brand with minimal effort.

In this vignette you will learn how to:

  • install and load the package,
  • apply the core BFH theme and colour scales,
  • explore the available palettes and theme variants,
  • set global defaults for a session, and
  • save or export plots using BFH-recommended dimensions.
Task Helpful functions
Apply the default styling theme_bfh()
Use branded colour scales scale_color_bfh(), scale_fill_bfh()
Manage fonts and defaults set_bfh_defaults(), set_bfh_fonts()
Browse colours and palettes bfh_cols(), show_bfh_palettes()
Export figures bfh_save()

Installation

BFHtheme is currently distributed via GitHub. Install the package with devtools or remotes and then load it alongside ggplot2:

# install.packages("remotes")
remotes::install_github("johanreventlow/BFHtheme")
library(BFHtheme)
library(ggplot2)

Basic Usage

Applying a Theme

Start by adding theme_bfh() to any ggplot. It injects BFH typography, spacing, and colour defaults while leaving your existing geoms untouched. Fonts are auto-detected the first time you call the theme.

ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point() +
  labs(
    title = "Fuel Efficiency by Vehicle Weight",
    x = "Weight (1000 lbs)",
    y = "Miles per Gallon"
  ) +
  theme_bfh()

Using Colour Scales

Pair the theme with branded colour scales. Use the discrete variants when mapping factors and the continuous versions for numeric gradients.

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 3) +
  labs(
    title = "Fuel Efficiency by Cylinder Count",
    x = "Weight (1000 lbs)",
    y = "Miles per Gallon",
    color = "Cylinders"
  ) +
  scale_color_bfh() +
  theme_bfh()

scale_fill_bfh() works the same way for fills (bars, areas, etc.).

For continuous colour mappings, switch to the gradient helpers:

ggplot(mtcars, aes(x = wt, y = mpg, color = hp)) +
  geom_point(size = 3) +
  labs(
    title = "Fuel Efficiency and Horsepower",
    x = "Weight (1000 lbs)",
    y = "Miles per Gallon",
    color = "Horsepower"
  ) +
  scale_color_bfh_continuous(palette = "blues") +
  theme_bfh()

The palette argument controls which sequential palette is used. Reverse the direction with reverse = TRUE when needed for visual clarity.

Available Colour Palettes

Use show_bfh_palettes() to preview every palette side by side:

# Display all available palettes
show_bfh_palettes()
Palette Description Recommended for
main Core hospital colours Default discrete scales
hospital Full Bispebjerg & Frederiksberg Hospital palette Hospital reports
hospital_blues / hospital_blues_seq Monochrome blue gradients Continuous hospital data
regionh Region Hovedstaden primaries Region-level reporting
regionh_blues / regionh_blues_seq Navy-focused gradients Region dashboards
hospital_infographic, regionh_infographic High-contrast mixes Infographics and slides

Access individual colours programmatically:

# Get specific colors
bfh_cols("hospital_primary", "hospital_blue")
#> hospital_primary    hospital_blue 
#>        "#007dbb"        "#009ce8"

# Get all colors
head(bfh_cols())
#>     hospital_primary        hospital_blue hospital_light_blue1 
#>            "#007dbb"            "#009ce8"            "#99d8f6" 
#> hospital_light_blue2         regionh_grey         regionh_dark 
#>            "#d8eef9"            "#646c6f"            "#333333"

Theme Variants

BFHtheme provides several theme variants for different use cases:

Standard Theme

theme_bfh() is the all-purpose choice for reports and dashboards.

ggplot(mtcars, aes(x = factor(cyl), fill = factor(cyl))) +
  geom_bar() +
  labs(title = "Vehicle Count by Cylinder") +
  scale_fill_bfh() +
  theme_bfh()

Customizing theme_bfh()

You can customize theme_bfh() for specific use cases by adding additional theme() calls after applying the base theme.

# Example: Create a dark theme variant
ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "white") +
  labs(title = "Custom Dark Theme") +
  theme_bfh() +
  theme(
    plot.background = element_rect(fill = "#1a1a1a", color = NA),
    panel.background = element_rect(fill = "#1a1a1a", color = NA),
    text = element_text(color = "white"),
    axis.text = element_text(color = "grey80")
  )

# Example: Create a minimal variant without gridlines
ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point() +
  labs(title = "Custom Minimal Theme") +
  theme_bfh() +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

Setting Global Defaults

Call set_bfh_defaults() at the start of a session to make BFH styling the global ggplot2 default. This updates the active theme and seed colours for common geoms.

# Set BFH theme and colors as defaults
set_bfh_defaults()

# Now all plots automatically use BFH styling
ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point()

# For plots with color mappings, still add the scale manually
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point() +
  scale_color_bfh()

# Reset to ggplot2 defaults when done
reset_bfh_defaults()

Remember to reset the defaults before working on non-BFH projects.

Saving Plots

bfh_save() wraps ggplot2::ggsave() with BFH-friendly presets so exported figures drop straight into reports and slides.

p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point() +
  theme_bfh()

# Save with preset dimensions
bfh_save("plot.png", p, preset = "report_full")

# Custom dimensions
bfh_save("plot.pdf", p, width = 8, height = 6, dpi = 600)

Inspect the recommended sizes programmatically:

# Internal function - use ::: to access
BFHtheme:::get_bfh_dimensions("presentation", "wide")

Font Configuration

Consistent typography is central to the BFH visual language. The package detects the best available font in this order:

  1. Mari (official BFH font installed on hospital machines)
  2. Roboto (open-source alternative)
  3. Arial (universal fallback)
  4. A system sans-serif font

Check which fonts are available on your machine:

check_bfh_fonts()

If you install new fonts during a session, run clear_bfh_font_cache() or call get_bfh_font(force_refresh = TRUE) to re-detect them.

Set up fonts and update ggplot defaults in one go:

# Setup and enable fonts
setup_bfh_fonts()

# Set as default for all themes
set_bfh_fonts()

Need Roboto? install_roboto_font() prints step-by-step installation guidance.

Where to Next

  • Deepen your workflow in vignette("customization") (advanced theme tweaks, palettes, and layout helpers).
  • Configure organisation-specific branding with vignette("theming").
  • Browse documentation for individual helpers using help(package = "BFHtheme") or ?theme_bfh.