9.5 KiB
Using brand.yml in R
Guide for using brand.yml in R projects beyond Shiny, including R Markdown documents, theming functions for plots and tables, and programmatic access to brand data.
Overview
The brand.yml R package provides tools for applying brand styling to R visualizations and documents. These tools work in any R context, including R Markdown documents, Quarto, standalone scripts, and Shiny applications.
Installation
# Install brand.yml package
install.packages("brand.yml")
R Markdown Integration
Use brand.yml in R Markdown documents (without runtime: shiny):
---
title: "My Report"
output:
html_document:
theme:
version: 5 # Required for brand.yml
brand: true # Auto-discover _brand.yml
---
Or specify a path:
---
title: "My Report"
output:
html_document:
theme:
version: 5
brand: "path/to/brand.yml"
---
Important: Set version: 5 to use Bootstrap 5, which has the best brand.yml support.
Other R Markdown Formats
Brand.yml works with various R Markdown output formats:
---
title: "Branded Report"
output:
html_document:
theme:
version: 5
brand: _brand.yml
pdf_document: default
---
Programmatic Access
Read and access brand data programmatically in any R script or document:
library(brand.yml)
# Read from default location (_brand.yml in project)
brand <- read_brand_yml()
# Read from specific path
brand <- read_brand_yml("path/to/brand.yml")
# Access brand elements
brand$color$palette$blue # "#447099"
brand$color$primary # blue -> "#447099"
brand$typography$base$family # "Open Sans"
brand$meta$name # "Company Name"
# Access all colors
brand$color$palette # List of all palette colors
brand$color$foreground # Foreground color
brand$color$background # Background color
Use programmatically accessed brand data to:
- Display brand colors in custom visualizations
- Show brand logo with correct paths
- Apply brand fonts to custom elements
- Build branded themes dynamically
- Generate branded reports programmatically
Branded Theming Functions
The brand.yml package includes helper functions to apply brand colors to plots and tables from popular R packages. These functions work in any R context (scripts, R Markdown, Quarto, Shiny).
theme_brand_ggplot2()
Apply brand colors to ggplot2 visualizations:
library(ggplot2)
library(brand.yml)
# Automatic brand detection
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
theme_brand_ggplot2()
# Explicit brand file
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
theme_brand_ggplot2(brand = "_brand.yml")
# Override specific colors
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
theme_brand_ggplot2(
background = "white",
foreground = "brand-gray",
accent = "brand-blue"
)
Parameters:
brand: NULL (auto-detect), file path, brand object, or FALSEbackground,foreground,accent: Primary color settingsbase_size: Base font size (default: 11)- Additional parameters for fine-grained control:
title_color,line_color,rect_fill,panel_background_fill,panel_grid_major_color, etc.
theme_brand_gt()
Apply brand colors to gt tables:
library(gt)
library(brand.yml)
# Create branded table
mtcars |>
head() |>
gt() |>
theme_brand_gt()
# With explicit brand
mtcars |>
head() |>
gt() |>
theme_brand_gt(brand = "_brand.yml")
# Override colors
mtcars |>
head() |>
gt() |>
theme_brand_gt(
background = "white",
foreground = "brand-gray"
)
Parameters:
table: The gt table object to themebrand: NULL (auto-detect), file path, brand object, or FALSEbackground: Table background color (default:brand.color.background)foreground: Text color (default:brand.color.foreground)
theme_brand_flextable()
Apply brand colors to flextable tables:
library(flextable)
library(brand.yml)
# Create branded flextable
mtcars |>
head() |>
flextable() |>
theme_brand_flextable()
# With explicit brand
mtcars |>
head() |>
flextable() |>
theme_brand_flextable(brand = "_brand.yml")
# Override colors
mtcars |>
head() |>
flextable() |>
theme_brand_flextable(
background = "white",
foreground = "brand-gray"
)
Parameters:
table: The flextable object to themebrand: NULL (auto-detect), file path, brand object, or FALSEbackground: Table background color (default:brand.color.background)foreground: Text color (default:brand.color.foreground)
theme_brand_plotly()
Apply brand colors to plotly visualizations:
library(plotly)
library(brand.yml)
# Create branded plotly chart
plot_ly(mtcars, x = ~mpg, y = ~hp, type = "scatter", mode = "markers") |>
theme_brand_plotly()
# With explicit brand
plot_ly(mtcars, x = ~mpg, y = ~hp, type = "scatter", mode = "markers") |>
theme_brand_plotly(brand = "_brand.yml")
# Override colors
plot_ly(mtcars, x = ~mpg, y = ~hp, type = "scatter", mode = "markers") |>
theme_brand_plotly(
background = "white",
foreground = "brand-gray",
accent = "brand-blue"
)
Parameters:
plot: The plotly plot object to themebrand: NULL (auto-detect), file path, brand object, or FALSEbackground: Plot background color (default:brand.color.background)foreground: Text/foreground color (default:brand.color.foreground)accent: Accent/highlight color (default:brand.color.primary)
theme_brand_thematic()
Apply brand colors to base R graphics via thematic:
library(thematic)
library(brand.yml)
# Create theme object
theme <- theme_brand_thematic()
# Use with thematic_with_theme()
thematic::thematic_with_theme(theme, {
plot(mtcars$mpg, mtcars$hp)
})
# Or use with ggplot2
thematic::thematic_with_theme(theme, {
ggplot(mtcars, aes(mpg, hp)) +
geom_point()
})
theme_brand_thematic_on()
Immediately activate brand theming globally for base R graphics:
library(thematic)
library(brand.yml)
# Turn on brand theming globally
theme_brand_thematic_on()
# Now all plots use brand colors
plot(mtcars$mpg, mtcars$hp)
hist(mtcars$mpg)
# Turn off later
thematic::thematic_off()
Parameters (both functions):
brand: NULL (auto-detect), file path, brand object, or FALSEbackground: Background color (default:brand.color.background)foreground: Foreground color (default:brand.color.foreground)accent: Accent color (default:brand.color.primary)...: Additional arguments passed to thematic package
Difference:
theme_brand_thematic(): Returns theme object for scoped usetheme_brand_thematic_on(): Immediately applies theme globally
R Markdown Example
Complete example showing theming functions in R Markdown:
---
title: "Branded Report"
output:
html_document:
theme:
version: 5
brand: _brand.yml
---
```{r setup}
library(ggplot2)
library(gt)
library(brand.yml)
```
## Sales Analysis
```{r plot}
ggplot(mtcars, aes(mpg, hp, color = factor(cyl))) +
geom_point(size = 3) +
labs(title = "MPG vs Horsepower", color = "Cylinders") +
theme_brand_ggplot2()
```
## Data Summary
```{r table}
mtcars |>
head(10) |>
gt() |>
theme_brand_gt() |>
tab_header(title = "Motor Trend Car Data")
```
Quarto Integration
Works seamlessly in Quarto documents:
---
title: "Branded Analysis"
format:
html:
brand: _brand.yml
---
```{r}
#| label: branded-plot
library(ggplot2)
library(brand.yml)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
theme_brand_ggplot2()
```
Script Usage
Use in standalone R scripts:
#!/usr/bin/env Rscript
library(brand.yml)
library(ggplot2)
# Read brand
brand <- read_brand_yml("_brand.yml")
# Create branded plot
p <- ggplot(mtcars, aes(mpg, hp)) +
geom_point(color = brand$color$primary) +
theme_brand_ggplot2()
# Save with brand colors
ggsave("output.png", p, width = 8, height = 6)
Benefits
- Consistency: Same brand styling across all R outputs (plots, tables, documents)
- Automatic detection: Functions find
_brand.ymlautomatically - Flexible override: Easy to customize colors when needed
- Works everywhere: R scripts, R Markdown, Quarto, Shiny
Tips
- Place
_brand.ymlat project root for automatic discovery - Use
read_brand_yml()for programmatic access to brand data - Combine theming functions for cohesive branded reports
- Set
version: 5in R Markdown YAML for Bootstrap 5 support - Test theme functions individually before combining in documents
Common Patterns
Branded Report with Multiple Visualizations
library(brand.yml)
library(ggplot2)
library(gt)
# Load brand
brand <- read_brand_yml()
# Create consistent visualizations
plot1 <- ggplot(data1, aes(x, y)) +
geom_point() +
theme_brand_ggplot2()
plot2 <- ggplot(data2, aes(x, y)) +
geom_line() +
theme_brand_ggplot2()
table1 <- data3 |>
gt() |>
theme_brand_gt()
Dynamic Brand Colors
library(brand.yml)
brand <- read_brand_yml()
# Use brand colors in custom visualizations
my_colors <- c(
brand$color$primary,
brand$color$secondary,
brand$color$success
)
# Apply to plot
plot(data, col = my_colors[factor(group)])
Conditional Branding
library(brand.yml)
# Use different brands for different contexts
if (Sys.getenv("BRAND_MODE") == "internal") {
brand <- read_brand_yml("internal-brand.yml")
} else {
brand <- read_brand_yml("external-brand.yml")
}
# Apply to visualizations
theme <- theme_brand_ggplot2(brand = brand)