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 formatsPalettes/Named Colors:
ipsum_pal
: A muted, qualitative color paletteft_cols
: FT color paletteft_pal
: A bright qualitative color paletteft_text_col
: FT color paletteFonts:
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 aliasesUtilities:
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
geomsinstall.packages("hrbrthemes") # NOTE: CRAN version is 0.8.0
# or
remotes::install_gitlab("hrbrmstr/hrbrthemes")
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.8.7'
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)
| Lang | # Files | (%) | LoC | (%) | Blank lines | (%) | # Lines | (%) | |:-----|---------:|-----:|-----:|-----:|------------:|----:|---------:|----:| | R | 21 | 0.40 | 1548 | 0.41 | 290 | 0.5 | 915 | 0.5 | | SVG | 4 | 0.08 | 310 | 0.08 | 0 | 0.0 | 0 | 0.0 | | JSON | 1 | 0.02 | 15 | 0.00 | 0 | 0.0 | 0 | 0.0 | | SUM | 26 | 0.50 | 1873 | 0.50 | 290 | 0.5 | 915 | 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.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.