How to Format Date in title text in ggplot2

In this tutorial, we will learn how to format date variables in the title text of a plot made with ggplot2. Sometimes one might want to write date in the title text. It is better to use the date as variable and format the way want, either full month or short month or full/partial days. We will use format() function available in base R to format a date variable to our liking in the title text.

Let us load the packages needed.

library(tidyquant)
library(tidyverse)
theme_set(theme_bw(16))

We will use stock market data to make barplots to show how to format date variable in title text. Let us download Google and Microsoft’s stock price data over time (from 2021 to now).

stock_tickers = c("GOOG","MSFT")
start_date <- as.Date("2021-01-01")
end_date <- Sys.Date()
stock_df <- stock_tickers |>
  tq_get(from = start_date, 
         to = end_date) 
stock_df %>% head()

# A tibble: 6 × 8
  symbol date        open  high   low close   volume adjusted
  <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
1 GOOG   2021-01-04  87.9  88.0  85.4  86.4 38038000     86.3
2 GOOG   2021-01-05  86.2  87.4  85.9  87.0 22906000     86.9
3 GOOG   2021-01-06  85.1  87.4  84.9  86.8 52042000     86.7
4 GOOG   2021-01-07  87.0  89.4  86.9  89.4 45300000     89.3
5 GOOG   2021-01-08  89.4  90.5  88.7  90.4 41012000     90.3
6 GOOG   2021-01-11  89.3  89.7  88.0  88.3 24194000     88.2

We will make a barplot of the yearly returns, so let us compute yearly returns for these two companies using tidyquant’s tq_transmute() function.

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 GOOG   2021-12-31          0.674
2 GOOG   2022-12-30         -0.387
3 GOOG   2023-12-29          0.588
4 GOOG   2024-07-05          0.364
5 MSFT   2021-12-31          0.558
6 MSFT   2022-12-30         -0.280

We have the returns data ready to make a barplot with year on x-axis and yearly returns on y-axis. We briefly specify the time period for these company’s returns in the title text.

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="Accent")+
  labs(x=NULL,
       title=paste0("GOOG, MSFT Returns from ",start_date, " to\n", end_date))
ggsave("How_to_format_date_variable_in_ggplot2_title.png")

How to format date variable in ggplot2 title
How to format date variable in ggplot2 title

Let us format the date variable in the title, so that it is more readable. We use format() function on the date variable with the specific format we want. In the example below we want to have the month name and year in full.

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="Accent")+
  labs(x=NULL,
       title=paste0("GOOG, MSFT Returns from ", format(as.Date(start_date), "%dst %B %Y"),
                    " to\n", format(end_date, "%dth %B %Y")))
ggsave("format_date_variable_in_title_text_ggplot2.png")

Format date variable in title text in ggplot2

Here is another example of formatting date in the title text with format() function. In the example below we use short month name instead of full month name.

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="Accent")+
  labs(x=NULL,
       title=paste0("GOOG, MSFT Returns from ", format(as.Date(start_date), "%d %b %Y"),
                    " to\n", format(end_date, "%d %b %Y")))
ggsave("format_date_variable_in_title_text_ggplot2_example2.png")

Format date variable in title text in ggplot2
Exit mobile version