# Facet my geo!

TIME TO TRY OUT ANOTHER HOUSE PRICE VISUALIZATION.

In this post we’ll try out a new way to visualize recent house price trends with R.

Just this wekeend I saw a new package geofacet for organizing ggplot2 facets along a geographic grid. It allows use to construct a small multiple graph that roughly looks like the United States. (Thanks to [@yoniceedee](https://twitter.com/yoniceedee) for recommending geofacet).

Let’s try it out using the same house price data we visualized recently. Details about the data are in that post, but we’ll be using the Freddie Mac House Price Index to once again visualize state house price trends.

Let’s get to it.

# Data

We’ll start this post with our data in hand. Just follow along here to get the data. We’ll begin with a data frame called df.state that looks like so.

 date geo hpi type hpa hpilag12 hpimax12 hpimin12 us.hpa us.hpi up down Our data frame df.state 1 2017-03-01 WY 187.119 state 0.016 184.247 188.474 184.247 0.066 170.971 0.066 0.016 Source: Freddie Mac House Price Index

The key variable we’ll need is hpa which captures the 12-month percent change in the house price index. Conveniently, we already have a state identifier to use with facet_geo (though we’ll have to rename it state).

## Facet my geo

With our data in hand, it’s pretty easy to create our plot. Our data goes from 1975 to March 2017, so we’ll subset it to focus on more recent trends. We’ll plot 12-month percent changes in house prices (variable hpa in our data) since 2000. We’ll also restrict our attention to March of each year (so we can end with the latest data in March 2017).

### Run this to get library:
# devtools::install_github("hafen/geofacet")
library(ggplot2)
library(viridis)
## Loading required package: viridisLite
library(scales)
library(geofacet)

## Subset data and drop US averages
df.state2<-filter(df.state,
year(date)>1999 & month(date)==3 &
!(geo %in% c("United States not seasonally adjusted",

# set up date limits for plot
xlim<-c(min(df.state2$date),max(df.state2$date))

# create state variable
df.state2$state<-df.state2$geo

# create plot:
ggplot(df.state2, aes(x=date, y=hpa,fill=hpa)) +

# geom col for little bars
geom_col()+

# use facet_geo
facet_geo(~ state, grid = "us_state_grid2")+

# my go to theme
theme_minimal()+

# the colors!
scale_fill_viridis(option="C",limits=c(-0.35,0.35),
label=percent,name="12-month\n% change")+

# set up x (date) and y (HPA) axes
scale_x_date(limits=xlim,breaks=xlim,date_labels="%y")+

scale_y_continuous(label=percent,limits=c(-0.35,0.35),
breaks=seq(-0.3,.3,.3))+

# labels, title, caption
labs(x="",y="",
title="House Price Appreciation",
subtitle="12-month percent change in March",
caption="@lenkiefer Source: Freddie Mac House Price Index")+

legend.position="top")