448 lines
9.5 KiB
Markdown
448 lines
9.5 KiB
Markdown
# 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
|
|
|
|
```r
|
|
# Install brand.yml package
|
|
install.packages("brand.yml")
|
|
```
|
|
|
|
## R Markdown Integration
|
|
|
|
Use brand.yml in R Markdown documents (without `runtime: shiny`):
|
|
|
|
```yaml
|
|
---
|
|
title: "My Report"
|
|
output:
|
|
html_document:
|
|
theme:
|
|
version: 5 # Required for brand.yml
|
|
brand: true # Auto-discover _brand.yml
|
|
---
|
|
```
|
|
|
|
Or specify a path:
|
|
|
|
```yaml
|
|
---
|
|
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:
|
|
|
|
```yaml
|
|
---
|
|
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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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 FALSE
|
|
- `background`, `foreground`, `accent`: Primary color settings
|
|
- `base_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:
|
|
|
|
```r
|
|
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 theme
|
|
- `brand`: NULL (auto-detect), file path, brand object, or FALSE
|
|
- `background`: Table background color (default: `brand.color.background`)
|
|
- `foreground`: Text color (default: `brand.color.foreground`)
|
|
|
|
### theme_brand_flextable()
|
|
|
|
Apply brand colors to flextable tables:
|
|
|
|
```r
|
|
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 theme
|
|
- `brand`: NULL (auto-detect), file path, brand object, or FALSE
|
|
- `background`: Table background color (default: `brand.color.background`)
|
|
- `foreground`: Text color (default: `brand.color.foreground`)
|
|
|
|
### theme_brand_plotly()
|
|
|
|
Apply brand colors to plotly visualizations:
|
|
|
|
```r
|
|
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 theme
|
|
- `brand`: NULL (auto-detect), file path, brand object, or FALSE
|
|
- `background`: 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:
|
|
|
|
```r
|
|
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:
|
|
|
|
```r
|
|
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 FALSE
|
|
- `background`: 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 use
|
|
- `theme_brand_thematic_on()`: Immediately applies theme globally
|
|
|
|
## R Markdown Example
|
|
|
|
Complete example showing theming functions in R Markdown:
|
|
|
|
````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:
|
|
|
|
````markdown
|
|
---
|
|
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:
|
|
|
|
```r
|
|
#!/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.yml` automatically
|
|
- **Flexible override**: Easy to customize colors when needed
|
|
- **Works everywhere**: R scripts, R Markdown, Quarto, Shiny
|
|
|
|
## Tips
|
|
|
|
- **Place `_brand.yml` at project root** for automatic discovery
|
|
- **Use `read_brand_yml()`** for programmatic access to brand data
|
|
- **Combine theming functions** for cohesive branded reports
|
|
- **Set `version: 5`** in R Markdown YAML for Bootstrap 5 support
|
|
- **Test theme functions** individually before combining in documents
|
|
|
|
## Common Patterns
|
|
|
|
### Branded Report with Multiple Visualizations
|
|
|
|
```r
|
|
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
|
|
|
|
```r
|
|
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
|
|
|
|
```r
|
|
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)
|
|
```
|