How to Add matching colors to keywords in title text

In this tutorial, we will learn how to color select words in title text with matching colors as in the plot made with ggplot. For example, if we had made a bar plot with two colors for two groups with ggplot2, we will learn how to color the group names in the title text with the same colors as in the bars.

This will help improve our ability to interpret the plot easily without need for additional legends for the colors used. We will Rcolorbrewer to find the right color codes usied in the plot and use ggtext, a R package to color the words in the title text.

Let us load the packages needed. We will use real stock market data to make the plots. We will use the R package tidyquant to get the stock market data.

library(ggtext)
library(RColorBrewer)
library(tidyverse)
theme_set(theme_bw(16))

Let us make a grouped barplot showing the yearly returns of Google and S&P 500 index. First, we will download the daily stock price data for these two tickers using tidyquant’s tq_get() function for the time interval of interest.

stock_tickers = c("SPY","GOOG")
stock_df <- stock_tickers |>
  tq_get(from = "2021-01-01", to=Sys.Date()) 

The downloaded stock price data looks like this.

stock_df %>% head()

# A tibble: 6 × 8
  symbol date        open  high   low close    volume adjusted
  <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
1 SPY    2021-01-04  375.  375.  365.  369. 110210800     351.
2 SPY    2021-01-05  368.  372.  368.  371.  66426200     353.
3 SPY    2021-01-06  370.  377.  369.  374. 107997700     355.
4 SPY    2021-01-07  376.  380.  376.  379.  68766800     360.
5 SPY    2021-01-08  381.  381.  377.  381.  71677200     362.
6 SPY    2021-01-11  378.  381.  378.  379.  51034700     360.

We will compute annual returns for these two stock tickers using tq_transmute() function in tidyquant.

yearly_return <- stock_df |>
  group_by(symbol) |>
  tq_transmute(select     = adjusted,
               mutate_fun = periodReturn,
               period     = "yearly") |>
  ungroup()
yearly_return %>% head()

# A tibble: 6 × 3
  symbol date       yearly.returns
  <chr>  <date>              <dbl>
1 SPY    2021-12-31          0.305
2 SPY    2022-12-30         -0.182
3 SPY    2023-12-29          0.262
4 SPY    2024-07-05          0.174
5 GOOG   2021-12-31          0.674
6 GOOG   2022-12-30         -0.387

How to add matching colors to select text in title

Let us make a grouped barplot with year on x-axis and returns on y-axis. We have colored the bars using scale_fill_brewer() with Dark2 palette.

yearly_return %>%
  ggplot(aes(x=year(date), y=yearly.returns, fill=symbol))+
  geom_col(position="dodge")+
  scale_y_continuous(breaks=scales::breaks_pretty(6),
                     labels = scales::percent_format())+
  scale_fill_brewer(palette="Dark2")+
  labs(x=NULL,
       title="Yearly Returns: S&P 500 vs Alphabet")
ggsave("How_to_add_matching_color_to_keywords_in_ggplot2_title.png")

Note the title text contains the two tickers name.

How to add matching colors to keywords in ggplot2 title text
How to add matching colors to keywords in ggplot2 title text

Getting color codes with brewer.pal()

To add matching colors to the names of the tickers in the title text, let first find what color codes we used to colr the bars. We can use RColoBrewer’s brewer.pal() function to get the color codes used in a palette.

my_colors <- brewer.pal(3,"Dark2")
my_colors[1]

Add matching colors to select text in title with ggtext

Now that we have the color codes needed, we can use the R package ggtext to specify the colors to the select keywords in the title. We will use the same approach as selectively coloring the title text, but this time with matching colors. Check out the special html-style code in the title section of the code below. In addition, we also need to add plot.title=element_markdown() to theme() and this renders the colors in the title text. Without adding ggtext’s element_markdown() we will not see the colors in the title instead we will see the actual html code.

yearly_return %>%
  ggplot(aes(x=year(date), y=yearly.returns, fill=symbol))+
  geom_col(position="dodge")+
  scale_y_continuous(breaks=scales::breaks_pretty(6),
                     labels = scales::percent_format())+
  scale_fill_brewer(palette="Dark2")+
  labs(x=NULL,
       title=paste0("Yearly Returns: <span style='color:",my_colors[1],"'>Alphabet </span> vs",
       "<span style='color:",my_colors[2], "'> S&P 500</span>")) +
  theme(plot.title = element_markdown(),
        legend.position="none")
ggsave("add_matching_colors_to_title_text_ggplot2.png")
Add matching colors to keywords in ggplot2 title text with ggtext
Exit mobile version