library(tidyverse)
library(tidyquant)
library(scales)
library(tibbletime)
library(data.table)
library(rlang)
library(ggridges)
library(viridis)
library(ggbeeswarm)
library(bea.R)
library(ggthemes)
library(lubridate)
library(data.table)
library(fredr)
library(gganimate)
library(gifski)
library(tweenr)

Inflation

dt<- 
  # data
  fread('http://download.bls.gov/pub/time.series/cu/cu.data.2.Summaries') %>% 
  #series ids
  left_join(fread("http://download.bls.gov/pub/time.series/cu/cu.series"), by="series_id") %>%
  # series names
  left_join(fread("http://download.bls.gov/pub/time.series/cu/cu.item"),by="item_code")
  
  
denver_cpi_2019 <- dt %>% filter(year==2019,area_code=="S48B", seasonal=="U")  %>% 
  group_by(series_id)%>%
  mutate(month=substr(period,2,3)) 
denver_cpi_2019 <- denver_cpi_2019 %>% group_by(series_id) %>% mutate(avg=mean(value))
denver_cpi_2019 <- distinct(denver_cpi_2019, series_id, .keep_all = TRUE)
denver_cpi_2019 <- denver_cpi_2019 %>% filter(period=="M01")
denver_cpi_2019$value <- denver_cpi_2019$avg
denver_cpi_2019 <- denver_cpi_2019[,-23]
denver_cpi_2019$period <- "S03"

denver_cpi <- dt %>% filter(year>2000,area_code=="S48B", seasonal=="U", period=="S03")  %>% 
  group_by(series_id)%>%
  mutate(month=substr(period,2,3)) 
denver_cpi <- rbind(denver_cpi, denver_cpi_2019)

denver_cpi<- denver_cpi %>% group_by(item_name) %>%  mutate(y=100*value/value[year==2001&period=="S03"],
  date=as.Date(ISOdate(year,as.numeric(substr(period,2,3)),1) ) ) %>% 
  ungroup()
a <- 
ggplot(data=denver_cpi,aes(x=date,y=y,color=item_code,label=item_name))+
  geom_line()+
  geom_text(hjust=1)+
  theme(legend.position="none")+
  scale_y_log10(breaks=c(75,100,125,150,175))+
  scale_x_date(date_breaks="1 year", date_labels="%Y")+
  labs(caption="Source: U.S. Bureau of Labor Statistics, Annual,not seasonally adjusted indexes. 2019 values are average through Septempber",
       title="Consumer Prices in the Denver-Aurora-Lakewood,CO Metro Area",
       subtitle="Consumer Price index for All Urban Consumers (CPI-U) special aggregate indexes\nlog scale, Jan 2001=100",

       y="")+
  theme(plot.title=element_text(face="bold"),
        plot.caption=element_text(hjust=0))+
  transition_reveal(date)

animate(a,end_pause=20)

What about over the last year?

dt<- 
  # data
  fread('http://download.bls.gov/pub/time.series/cu/cu.data.2.Summaries') %>% 
  #series ids
  left_join(fread("http://download.bls.gov/pub/time.series/cu/cu.series"), by="series_id") %>%
  # series names
  left_join(fread("http://download.bls.gov/pub/time.series/cu/cu.item"),by="item_code")

denver_cpi <- dt %>% filter(year>2017,area_code=="S48B", seasonal=="U")  %>% 
  group_by(series_id)%>%
  mutate(month=substr(period,2,3)) 
denver_cpi <- denver_cpi[-c(133:176),]
denver_cpi<-denver_cpi[!grepl("M13", denver_cpi$period),]

denver_cpi <- denver_cpi  %>% arrange(year) %>% arrange(item_name)
denver_cpi <- denver_cpi %>% group_by(item_name) %>% mutate(yoy=value/lag(value)-1)
denver_cpi$yoy <- denver_cpi$yoy*100

denver_cpi<- denver_cpi %>%group_by(year) %>%  group_by(item_name) %>%  mutate(
  date=as.Date(ISOdate(year,as.numeric(substr(period,2,3)),1) ) ) %>% 
  ungroup()
d.list <- unique(denver_cpi$date)
d.list2 <- unique(denver_cpi$date)
denver_cpi<-denver_cpi[!(is.na(denver_cpi$yoy)),]

ggplot(data=denver_cpi,aes(x=date,y=yoy,color=item_name))+
    facet_wrap(~item_name,scales="free_y")+
    geom_line()+
    geom_ribbon(alpha=0.5,aes(ymin=0,ymax=yoy,fill=item_name),color=NA)+
    geom_line(size=0.5)+
    theme_minimal(base_size=8)+theme(legend.position="none")+
    scale_x_date(limits=c(min(d.list),max(d.list2)))+  
    theme(plot.caption=element_text(hjust=0))+
    labs(x="", y="Percent Change",
         subtitle=paste("by major category (% change from 2 months prior, not seasonally adjusted. As of ",
                        as.character(last(d.list2),format="%b-%Y")),
         title="Denver-Aurora-Lakewood,CO Metro Area Consumer Prices since 2018",
         caption="Source: U.S. Bureau of Labor Statistics, not seasonally adjusted ")+
  theme(plot.title=element_text(face="bold"),
        plot.caption=element_text(hjust=0))