Additional Themes and Theme Components for โggplot2โ
This is a very focused package that provides typography-centric themes and theme components for ggplot2.
The core theme: theme_ipsum
(โipsumโ is Latin for โpreciseโ) uses
Arial Narrow which should be installed on practically any modern system,
so itโs โfreeโ-ish. This font is condensed, has solid default kerning
pairs and geometric numbers. Thatโs what I consider the โfont trifectaโ
must-have for charts. An additional quality for fonts for charts is that
they have a diversity of weights. Arial Narrow (the one on most systems,
anyway) does not have said diversity but this quality is not (IMO) a
โmust haveโ.
The following functions are implemented/objects are exported:
Themes:
theme_ipsum
: Arial Narrowtheme_ipsum_gs
: Goldman Sans Condensedtheme_ipsum_es
: Econ Sans Condensedtheme_ipsum_rc
: Roboto Condensedtheme_ipsum_ps
: IBM Plex Sans fonttheme_ipsum_pub
: Public Sanstheme_ipsum_tw
: Titilium Webtheme_modern_rc
: Roboto Condensed dark themetheme_ft_rc
: Dark theme based on FTโs dark theme (Roboto Condensed)
Scales (that align with various themes):
scale_color_ipsum
: Discrete color & fill scales based on the ipsum palettescale_colour_ipsum
: Discrete color & fill scales based on the ipsum palettescale_fill_ipsum
: Discrete color & fill scales based on the ipsum palettescale_color_ft
: Discrete color & fill scales based on the FT palettescale_colour_ft
: Discrete color & fill scales based on the FT palettescale_fill_ft
: Discrete color & fill scales based on the FT palettescale_x_comma
: X & Y scales with opinionated presets for percent & comma label formatsscale_x_percent
: X & Y scales with opinionated presets for percent & comma label formatsscale_y_comma
: X & Y scales with opinionated presets for percent & comma label formatsscale_y_percent
: X & Y scales with opinionated presets for percent & comma label formats
Palettes/Named Colors:
ipsum_pal
: A muted, qualitative color paletteft_cols
: FT color paletteft_pal
: A bright qualitative color paletteft_text_col
: FT color palette
Fonts:
font_an
: Arial Narrow font name R variable aliasesfont_es
: Econ Sans font name R variable aliasesfont_es_bold
: Econ Sans font name R variable aliasesfont_es_light
: Econ Sans font name R variable aliasesfont_rc
: Roboto Condensed font name R variable aliasesfont_rc_light
: Roboto Condensed font name R variable aliasesfont_pub
: Public Sans font name R variable aliasesfont_pub_bold
: Public Sans font name R variable aliasesfont_pub_light
: Public Sans font name R variable aliasesfont_pub_thin
: Public Sans font name R variable aliasesfont_ps
: PlexSans font name R variable aliasesfont_ps_light
: PlexSans font name R variable aliases
Flexoki Color Scales:
scale_color_flexoki_light
: Discrete color scale using Flexoki light colorsscale_fill_flexoki_light
: Discrete fill scale using Flexoki light colorsscale_color_flexoki_dark
: Discrete color scale using Flexoki dark colorsscale_fill_flexoki_dark
: Discrete fill scale using Flexoki dark colorsscale_color_flexoki_continuous
: Continuous color scale with 8 palette optionsscale_fill_flexoki_continuous
: Continuous fill scale with 8 palette options
Flexoki Palettes:
flexoki_light
: Vector of 8 colors in the light variantflexoki_dark
: Vector of 8 colors in the dark variantflexoki_extended
: List of 8 color palettes with 13 shades each for continuous interpolation
Utilities:
flush_ticks
: Makes axis text labels flush on the endsft_geom_defaults
: Change geom defaults from black to custom lights for the FT themegg_check
: Spell check ggplot2 plot labelsimport_econ_sans
: Import Econ Sans Condensed font for use in chartsimport_plex_sans
: Import IBM Plex Sans font for use in chartsimport_roboto_condensed
: Import Roboto Condensed font for use in chartsmodern_geom_defaults
: Change geom defaults from black to white for the modern themeupdate_geom_font_defaults
: Update matching font defaults for text geoms
install.packages("hrbrthemes") # NOTE: CRAN version is 0.8.7
NOTE: To use the โremotesโ install options you will need to have the {remotes} package installed.
library(hrbrthemes)
library(gcookbook)
library(tidyverse)
# current version
packageVersion("hrbrthemes")
## [1] '0.90'
ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 scatterplot example",
subtitle="A plot that is only useful for demonstration purposes",
caption="Brought to you by the letter 'g'") +
theme_ipsum()
ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 scatterplot example",
subtitle="A plot that is only useful for demonstration purposes",
caption="Brought to you by the letter 'g'") +
theme_ipsum_rc()
ggplot(mtcars, aes(mpg, wt)) +
geom_point(color = ft_cols$yellow) +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 scatterplot example",
subtitle="A plot that is only useful for demonstration purposes",
caption="Brought to you by the letter 'g'") +
theme_ft_rc()
ggplot(mpg, aes(displ, hwy)) +
geom_jitter(aes(color=class, fill=class), size=3, shape=21, alpha=1/2) +
scale_x_continuous(expand=c(0,0), limits=c(1, 8), breaks=1:8) +
scale_y_continuous(expand=c(0,0), limits=c(10, 50)) +
scale_color_ipsum() +
scale_fill_ipsum() +
facet_wrap(~class, scales="free") +
labs(
title="IBM Plex Sans Test",
subtitle="This is a subtitle to see the how it looks in IBM Plex Sans",
caption="Source: hrbrthemes & IBM"
) +
theme_ipsum_ps(grid="XY", axis="xy") +
theme(legend.position="none") -> gg
flush_ticks(gg)
## theme(axis.text.x=element_text(hjust=c(0, rep(0.5, 6), 1))) +
## theme(axis.text.y=element_text(vjust=c(0, rep(0.5, 3), 1)))
ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(color=factor(carb))) +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 scatterplot example",
subtitle="A plot that is only useful for demonstration purposes",
caption="Brought to you by the letter 'g'") +
scale_color_ipsum() +
theme_ipsum_rc()
count(mpg, class) %>%
mutate(pct=n/sum(n)) %>%
ggplot(aes(class, pct)) +
geom_col() +
scale_y_percent() +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 column chart example with percents",
subtitle="A plot that is only useful for demonstration purposes",
caption="Brought to you by the letter 'g'") +
theme_ipsum(grid="Y")
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
geom_area() +
scale_fill_ipsum() +
scale_x_continuous(expand=c(0,0)) +
scale_y_comma() +
labs(title="Age distribution of population in the U.S., 1900-2002",
subtitle="Example data from the R Graphics Cookbook",
caption="Source: R Graphics Cookbook") +
theme_ipsum_rc(grid="XY") +
theme(axis.text.x=element_text(hjust=c(0, 0.5, 0.5, 0.5, 1))) +
theme(legend.position="bottom")
update_geom_font_defaults(font_rc_light)
count(mpg, class) %>%
mutate(n=n*2000) %>%
arrange(n) %>%
mutate(class=factor(class, levels=class)) %>%
ggplot(aes(class, n)) +
geom_col() +
geom_text(aes(label=scales::comma(n)), hjust=0, nudge_y=2000) +
scale_y_comma(limits=c(0,150000)) +
coord_flip() +
labs(x="Fuel efficiency (mpg)", y="Weight (tons)",
title="Seminal ggplot2 column chart example with commas",
subtitle="A plot that is only useful for demonstration purposes, esp since you'd never\nreally want direct labels and axis labels",
caption="Brought to you by the letter 'g'") +
theme_ipsum_rc(grid="X")
df <- data.frame(x=c(20, 25, 30), y=c(4, 4, 4), txt=c("One", "Two", "Three"))
ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
labs(x="This is some txt", y="This is more text",
title="Thisy is a titlle",
subtitle="This is a subtitley",
caption="This is a captien") +
theme_ipsum_rc(grid="XY") -> gg
gg_check(gg)
## Possible misspelled words in [title]: (Thisy, titlle)
## Possible misspelled words in [subtitle]: (subtitley)
## Possible misspelled words in [caption]: (captien)
The Flexoki color system provides both discrete and continuous color scales in light and dark variants.
# Discrete colors example with light variant
ggplot(mpg, aes(class, fill=class)) +
geom_bar() +
labs(title="Flexoki Light Colors",
subtitle="Discrete color scale example",
caption="Using scale_fill_flexoki_light()") +
theme_ipsum() +
scale_fill_flexoki_light() +
theme(legend.position="none")
# Dark variant with points
ggplot(mpg, aes(displ, hwy, color=class)) +
geom_point(size=3) +
labs(title="Flexoki Dark Colors",
subtitle="Another discrete color example",
caption="Using scale_color_flexoki_dark()") +
theme_ipsum_rc() +
scale_color_flexoki_dark()
library(patchwork)
data.frame(
x = rep(1:50, 50),
y = rep(1:50, each=50),
z = sqrt((rep(1:50, 50)-25)^2 + (rep(1:50, each=50)-25)^2)
) -> grad_df
names(flexoki_dark) |>
map(\(.p) {
ggplot(grad_df, aes(x, y, fill=z)) +
geom_tile() +
scale_fill_flexoki_continuous(palette = .p) +
labs(
x = NULL, y = NULL
) +
theme_ipsum(grid="") +
theme(legend.position = "none")
}) |>
do.call(what = "wrap_plots") +
plot_layout(ncol = 4) +
plot_annotation(
title="Flexoki Continuous Color Scales",
subtitle="All 8 continuous color palettes",
caption="Using scale_fill_flexoki_continuous()",
theme = theme_ipsum(grid="")
)
Lang | # Files | (%) | LoC | (%) | Blank lines | (%) | # Lines | (%) |
---|---|---|---|---|---|---|---|---|
R | 22 | 0.41 | 1633 | 0.42 | 297 | 0.5 | 1003 | 0.5 |
SVG | 4 | 0.07 | 310 | 0.08 | 0 | 0.0 | 0 | 0.0 |
JSON | 1 | 0.02 | 15 | 0.00 | 0 | 0.0 | 0 | 0.0 |
SUM | 27 | 0.50 | 1958 | 0.50 | 297 | 0.5 | 1003 | 0.5 |
{cloc} ๐ฆ metrics for hrbrthemes
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.