3 is highest risk, 2 is moderate, 1 is low
table <- read_csv("census.csv")
## Rows: 4 Columns: 19
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): avg_eal_tercile
## dbl (18): asian, avghhsize, bacplus, black, child, density, hispanic, medgro...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
table2 <- read_csv("industry.csv")
## Rows: 4 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): avg_eal_tercile
## dbl (14): FIRE, agriculutre_forestry_etc, armed_forces, arts_ent_rec_etc, co...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
kable(table,caption="Census Variables by Risk Level")
avg_eal_tercile | asian | avghhsize | bacplus | black | child | density | hispanic | medgrossrents | medhhinc | medianhhval | other | owner_occupied | poverty | senior | total | unemp | vacant | white |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0.0315712 | 2.492941 | 0.3567584 | 0.1567143 | 0.2055315 | 345.1562 | 0.1144124 | 1042.8824 | 68181.35 | 219141.2 | 0.0381176 | 0.6606767 | 0.1227416 | 0.1556827 | 1494376.3 | 0.0503188 | 0.0879593 | 0.6591846 |
2 | 0.0374453 | 2.589091 | 0.3574478 | 0.1343262 | 0.2111732 | 604.2491 | 0.1572416 | 1089.0303 | 71106.09 | 240212.1 | 0.0427232 | 0.6623240 | 0.1234514 | 0.1502595 | 2060857.9 | 0.0543446 | 0.0858594 | 0.6282638 |
3 | 0.0889935 | 2.749091 | 0.3387351 | 0.0946081 | 0.2056592 | 828.4572 | 0.2888781 | 1412.9091 | 75917.24 | 387818.2 | 0.0494946 | 0.6279769 | 0.1258272 | 0.1651189 | 3149811.3 | 0.0588635 | 0.1053852 | 0.4780258 |
Outside | 0.0150771 | 2.527414 | 0.2405747 | 0.0833987 | 0.2033337 | 115.2304 | 0.1335524 | 854.9571 | 56550.76 | 176321.7 | 0.0440430 | 0.6892702 | 0.1554496 | 0.1803648 | 109954.8 | 0.0553571 | 0.1511438 | 0.7239288 |
kable(table2,caption="Census Industry by Risk Level")
avg_eal_tercile | FIRE | agriculutre_forestry_etc | armed_forces | arts_ent_rec_etc | construction | education_healthcare_etc | information | manufacturing | other | professional_science_managment_etc | public_admin | retail | transportation_warehouse_utilities | wholesale |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0.0722513 | 0.0089891 | 0.0099165 | 0.0835972 | 0.0632696 | 0.2451436 | 0.0180693 | 0.0957320 | 0.0461523 | 0.1176257 | 0.0523191 | 0.1067635 | 0.0549619 | 0.0252088 |
2 | 0.0703715 | 0.0083459 | 0.0074881 | 0.0846070 | 0.0643641 | 0.2331948 | 0.0176900 | 0.1133960 | 0.0466104 | 0.1192654 | 0.0454758 | 0.1095589 | 0.0535857 | 0.0260463 |
3 | 0.0670700 | 0.0173628 | 0.0086841 | 0.1020863 | 0.0728896 | 0.2182436 | 0.0198586 | 0.0764031 | 0.0474106 | 0.1310278 | 0.0458772 | 0.1119322 | 0.0562385 | 0.0249155 |
Outside | 0.0444278 | 0.0391243 | 0.0089660 | 0.0892926 | 0.0697175 | 0.2388585 | 0.0121106 | 0.1328069 | 0.0469522 | 0.0739920 | 0.0527425 | 0.1165147 | 0.0529105 | 0.0215839 |
#Line Graphs
data <- read_csv("all_cbsa_summary.csv") %>%
filter(!is.na(avg_eal))
## Rows: 9400 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): avg_eal_tercile, NAME
## dbl (8): archive_version_year, CBSAFP, rows, with_parent_number, mean_employ...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
data$avg_eal_tercile <- factor(data$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
plot1 <- data %>% ggplot()+
geom_line(aes(archive_version_year,rows,color=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =3)+
ggtitle("Number of Businesses")
ggsave("figures/number_of_businesses.png")
## Saving 7 x 5 in image
plot2 <- data %>% ggplot()+
geom_line(aes(archive_version_year,mean_year_established,color=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =3)+
ggtitle("Mean year established")
ggsave("figures/mean_year_established.png")
## Saving 7 x 5 in image
## Warning: Removed 10 rows containing missing values or values outside the scale range
## (`geom_line()`).
ggplotly(plot1) %>% layout(showlegend = FALSE)
ggplotly(plot2) %>% layout(showlegend = FALSE)
data <- read_csv("cbsa_births_deaths_exits_entrys.csv")
## Rows: 1000 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): NAME, avg_eal_tercile
## dbl (8): archive_version_year, CBSAFP, entry, exit, births, deaths, avg_eal,...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
data$avg_eal_tercile <- factor(data$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
plot1 <- data %>% ggplot()+
geom_line(aes(archive_version_year,births,color=NAME,group=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =3)+
ggtitle("Births")
ggsave("figures/births.png")
## Saving 7 x 5 in image
plot2 <- data %>% ggplot()+
geom_line(aes(archive_version_year,deaths,color=NAME,group=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =3)+
ggtitle("Deaths")
ggsave("figures/deaths.png")
## Saving 7 x 5 in image
## Warning: Removed 100 rows containing missing values or values outside the scale range
## (`geom_line()`).
plot3 <- data %>%
ggplot()+
geom_line(aes(archive_version_year,entry,color=NAME,group=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =3)+
ggtitle("Entries")
ggsave("figures/entries.png")
## Saving 7 x 5 in image
plot4 <- data %>% ggplot()+
geom_line(aes(archive_version_year,exit,color=NAME,group=NAME),alpha=0.5)+
facet_wrap(~avg_eal_tercile,ncol =)+
ggtitle("Exits")
ggsave("figures/exits.png")
## Saving 7 x 5 in image
## Warning: Removed 100 rows containing missing values or values outside the scale range
## (`geom_line()`).
ggplotly(plot1) %>% layout(showlegend = FALSE)
ggplotly(plot2) %>% layout(showlegend = FALSE)
ggplotly(plot3) %>% layout(showlegend = FALSE)
ggplotly(plot4) %>% layout(showlegend = FALSE)
all <- read_csv("critical_pop_all.csv")
all$avg_eal_tercile <- factor(all$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
all$pop_tercile <- factor(all$pop_tercile, levels = c("Pop: High", "Pop: Moderate", "Pop: Low"))
births <- read_csv("critical_pop_births.csv") %>%
filter(archive_version_year != 2012)
births$avg_eal_tercile <- factor(births$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
births$pop_tercile <- factor(births$pop_tercile, levels = c("Pop: High", "Pop: Moderate", "Pop: Low"))
entries <- read_csv("critical_pop_entries.csv")%>%
filter(archive_version_year != 2012)
entries$avg_eal_tercile <- factor(entries$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
entries$pop_tercile <- factor(entries$pop_tercile, levels = c("Pop: High", "Pop: Moderate", "Pop: Low"))
deaths <- read_csv("critical_pop_deaths.csv")%>%
filter(archive_version_year != 2022)
deaths$avg_eal_tercile <- factor(deaths$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
deaths$pop_tercile <- factor(deaths$pop_tercile, levels = c("Pop: High", "Pop: Moderate", "Pop: Low"))
exits <- read_csv("critical_pop_exits.csv")%>%
filter(archive_version_year != 2022)
exits$avg_eal_tercile <- factor(exits$avg_eal_tercile, levels = c("High", "Moderate", "Low"))
exits$pop_tercile <- factor(exits$pop_tercile, levels = c("Pop: High", "Pop: Moderate", "Pop: Low"))
plot1 <- all %>%
ggplot()+
geom_line(aes(archive_version_year,row_count,color=avg_eal_tercile))+
facet_grid(pop_tercile~critical)+
ggtitle("Critical by population tercile, all")
ggsave("figures/critical_by_pop.png")
plot2 <- births %>%ggplot()+
geom_line(aes(archive_version_year,births,color=avg_eal_tercile))+
facet_grid(pop_tercile~critical)+
ggtitle("NAICS by tercile, births")
ggsave("figures/naics_by_tercile_births.png")
plot3 <- deaths %>% ggplot()+
geom_line(aes(archive_version_year,deaths,color=avg_eal_tercile))+
facet_grid(pop_tercile~critical)+
ggtitle("NAICS by tercile, deaths")
ggsave("figures/naics_by_tercile_deaths.png")
plot4 <- entries %>% ggplot()+
geom_line(aes(archive_version_year,entries,color=avg_eal_tercile))+
facet_grid(pop_tercile~critical)+
ggtitle("NAICS by tercile, entries")
ggsave("figures/naics_by_tercile_entries.png")
plot5 <- exits %>% ggplot()+
geom_line(aes(archive_version_year,exits,color=avg_eal_tercile))+
facet_grid(pop_tercile~critical)+
ggtitle("NAICS by tercile, exits")
ggsave("figures/naics_by_tercile_exits.png")
plot1
plot2
plot3
plot4
plot5
regions <- read_csv("top100_regions.csv") %>%
mutate(GEOID =as.character(GEOID)) %>%
select(GEOID, Region)
## Rows: 100 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): pop_tercile, NAME, Region
## dbl (1): GEOID
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
top100_cbsa <- get_acs(geography = "cbsa", variables = c(pop="B01001_001"),output = "wide") %>%
top_n(100,popE) %>%
mutate(pop_tercile_num = ntile(popE, 3)) %>%
mutate(pop_tercile=as_factor(pop_tercile_num)) %>%
mutate(pop_tercile = factor(pop_tercile, levels = 1:3, labels = c("Pop: Low", "Pop: Moderate", "Pop: High"))) %>%
select(pop_tercile,pop_tercile_num,popE,GEOID) %>%
left_join(regions)
## Getting data from the 2018-2022 5-year ACS
## Joining with `by = join_by(GEOID)`
top100_cbsa_new <- top100_cbsa %>%
rename_with(~paste0(., "_new"), everything())
top100_cbsa_old <- top100_cbsa %>%
rename_with(~paste0(., "_old"), everything())
moves <- read_csv("migration_map.csv") %>%
select(CBSAFP_old,CBSAFP_new,NAME_old,NAME_new,row_count,avg_eal_tercile_old,avg_eal_tercile_new) %>%
mutate(CBSAFP_old=as.character(CBSAFP_old)) %>%
mutate(CBSAFP_new=as.character(CBSAFP_new)) %>%
mutate(NAME_old=ifelse(is.na(avg_eal_tercile_old),"Outside",NAME_old)) %>%
mutate(NAME_new=ifelse(is.na(avg_eal_tercile_new),"Outside",NAME_new)) %>%
group_by(CBSAFP_old,CBSAFP_new,NAME_old,NAME_new,avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count)) %>%
left_join(top100_cbsa_old, by=c("CBSAFP_old"="GEOID_old")) %>%
left_join(top100_cbsa_new, by=c("CBSAFP_new"="GEOID_new")) %>%
mutate(avg_eal_tercile_old=ifelse(is.na(avg_eal_tercile_old),"Outside",avg_eal_tercile_old)) %>%
mutate(avg_eal_tercile_new=ifelse(is.na(avg_eal_tercile_new),"Outside",avg_eal_tercile_new)) %>%
mutate(Region_old=ifelse(is.na(Region_old),"Outside",Region_old)) %>%
mutate(Region_new=ifelse(is.na(Region_new),"Outside",Region_new))
## Rows: 63970 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (10): fips_code, lead_county, NAME_old, NAME_new, avg_eal_tercile_old, a...
## dbl (12): archive_version_year, row_count, CBSAFP_old, CBSAFP_new, avg_eal_o...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## `summarise()` has grouped output by 'CBSAFP_old', 'CBSAFP_new', 'NAME_old', 'NAME_new', 'avg_eal_tercile_old'. You can override using the `.groups` argument.
data <- moves %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Risk level to Risk level", cex.main = 1)
png(file="risk_to_risk.png")
data <- moves %>%
filter(Region_old==Region_new) %>%
filter(Region_old!="Outside") %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data, directional = 1, direction.type = c("diffHeight", "arrows"),link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green"))
title("Moves within Region", cex.main = 1)
png(file="moves_within_region.png")
data <- moves %>%
filter(Region_old!=Region_new) %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data, directional = 1, direction.type = c("diffHeight", "arrows"),link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Moves outside Region", cex.main = 1)
png(file="moves_outside_region.png")
This chunk produces the chord diagrams for critical services and non-critical services
data <- read_csv("moves_crit.csv") %>%
mutate(avg_eal_tercile_old=ifelse(is.na(avg_eal_tercile_old),"Outside",avg_eal_tercile_old)) %>%
mutate(avg_eal_tercile_new=ifelse(is.na(avg_eal_tercile_new),"Outside",avg_eal_tercile_new))
## Rows: 16 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): avg_eal_tercile_old, avg_eal_tercile_new
## dbl (1): row_count
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Critical: Risk level to Risk level", cex.main = 1)
png(file="figures/critical_risk_to_risk.png")
data <- read_csv("moves_non_crit.csv") %>%
mutate(avg_eal_tercile_old=ifelse(is.na(avg_eal_tercile_old),"Outside",avg_eal_tercile_old)) %>%
mutate(avg_eal_tercile_new=ifelse(is.na(avg_eal_tercile_new),"Outside",avg_eal_tercile_new))
## Rows: 16 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): avg_eal_tercile_old, avg_eal_tercile_new
## dbl (1): row_count
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Non-Critical: Risk level to Risk level", cex.main = 1)
png(file="figures/non_critical_risk_to_risk.png")
This chunk produces the chord diagrams for standalone and chains
data <- read_csv("moves_chain.csv") %>%
mutate(avg_eal_tercile_old=ifelse(is.na(avg_eal_tercile_old),"Outside",avg_eal_tercile_old)) %>%
mutate(avg_eal_tercile_new=ifelse(is.na(avg_eal_tercile_new),"Outside",avg_eal_tercile_new))
## Rows: 16 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): avg_eal_tercile_old, avg_eal_tercile_new
## dbl (1): row_count
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Chain: Risk level to Risk level", cex.main = 1)
png(file="figures/chain_risk_to_risk.png")
data <- read_csv("moves_standalone.csv") %>%
mutate(avg_eal_tercile_old=ifelse(is.na(avg_eal_tercile_old),"Outside",avg_eal_tercile_old)) %>%
mutate(avg_eal_tercile_new=ifelse(is.na(avg_eal_tercile_new),"Outside",avg_eal_tercile_new))
## Rows: 16 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): avg_eal_tercile_old, avg_eal_tercile_new
## dbl (1): row_count
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Standalone: Risk level to Risk level", cex.main = 1)
png(file="figures/standalone_risk_to_risk.png")
This chunk produces across population categories. Outside the top100 is excluded.
#within same population category
data <- moves %>%
filter(!is.na(pop_tercile_old),pop_tercile_num_old==pop_tercile_num_new) %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Same pop category: Risk level to Risk level", cex.main = 1)
png(file="figures/samepop_risk_to_risk.png")
#lower pop to higher pop
data <- moves %>%
filter(!is.na(pop_tercile_old),pop_tercile_num_old>pop_tercile_num_new) %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Towards higher pop: Risk level to Risk level", cex.main = 1)
png(file="figures/low_to_high_risk_to_risk.png")
#higher pop to lower pop
data <- moves %>%
filter(!is.na(pop_tercile_old),pop_tercile_num_old<pop_tercile_num_new) %>%
group_by(avg_eal_tercile_old,avg_eal_tercile_new) %>%
summarise(row_count=sum(row_count))
## `summarise()` has grouped output by 'avg_eal_tercile_old'. You can override
## using the `.groups` argument.
chordDiagram(
x=data,
directional = 1,
direction.type = c("diffHeight", "arrows"),
link.arr.type = "big.arrow",
grid.col = c(High="red",Moderate="yellow", Low="green",Outside="gray"))
title("Toward lower pop: Risk level to Risk level", cex.main = 1)
png(file="figures/high_to_low_risk_to_risk.png")
This chunk produces bar graphs for all 100 CBSAs and corresponding entries/exits and births/deaths for all years of data
library(ggpattern)
data <- read_csv("cbsa_births_deaths_exits_entrys.csv")
## Rows: 1000 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): NAME, avg_eal_tercile
## dbl (8): archive_version_year, CBSAFP, entry, exit, births, deaths, avg_eal,...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(data)
## archive_version_year CBSAFP entry exit
## Min. :2013 Min. :10420 Min. : 1.00 Min. : 1.00
## 1st Qu.:2015 1st Qu.:19348 1st Qu.: 26.00 1st Qu.: 25.00
## Median :2018 Median :32060 Median : 45.00 Median : 44.00
## Mean :2018 Mean :30209 Mean : 67.08 Mean : 67.08
## 3rd Qu.:2020 3rd Qu.:40080 3rd Qu.: 84.00 3rd Qu.: 79.00
## Max. :2022 Max. :49340 Max. :561.00 Max. :670.00
## NA's :100
## births deaths NAME avg_eal
## Min. : 1328 Min. : 1128 Length:1000 Min. :38.21
## 1st Qu.: 3617 1st Qu.: 3416 Class :character 1st Qu.:65.60
## Median : 6166 Median : 5294 Mode :character Median :75.28
## Mean : 12411 Mean : 10836 Mean :77.28
## 3rd Qu.: 13648 3rd Qu.: 11576 3rd Qu.:94.11
## Max. :171670 Max. :139494 Max. :99.91
## NA's :100
## tercile avg_eal_tercile
## Min. :1.00 Length:1000
## 1st Qu.:1.00 Class :character
## Median :2.00 Mode :character
## Mean :1.99
## 3rd Qu.:3.00
## Max. :3.00
##
data <- data %>% gather(type,row_count, c(entry,exit,births,deaths)) %>%
group_by(NAME,avg_eal_tercile,tercile,type) %>%
summarise(row_count=sum(row_count,na.rm = TRUE)) %>%
mutate(label= paste0(type,"-",avg_eal_tercile))
## `summarise()` has grouped output by 'NAME', 'avg_eal_tercile', 'tercile'. You
## can override using the `.groups` argument.
color_ramp <- c("births-Low" = "#00b100", "births-Moderate" = "#007e00", "births-High" = "#004b00",
"deaths-Low" = "#c600c6", "deaths-Moderate" = "#9f009f", "deaths-High" = "#780078")
data %>%
filter(type %in% c("births", "deaths")) %>%
group_by(NAME) %>%
mutate(sort = sum(row_count,na.rm = T)) %>%
ungroup() %>%
ggplot(aes(x = fct_reorder(NAME, sort), y = row_count, fill = label)) +
geom_bar(position = "dodge", stat = "identity")+
coord_flip()+
theme_minimal()+
scale_fill_manual(values=color_ramp)+
ggtitle("Births and Deaths - 2013-2022")+
theme(legend.position = "bottom")
color_ramp <- c("entry-Low" = "#00b100", "entry-Moderate" = "#007e00", "entry-High" = "#004b00",
"exit-Low" = "#c600c6", "exit-Moderate" = "#9f009f", "exit-High" = "#780078")
data %>% filter(type %in% c("entry","exit")) %>%
group_by(NAME) %>%
mutate(sort = sum(row_count,na.rm = T)) %>%
ungroup() %>%
ggplot(aes(fill = label, y = row_count, x = forcats::fct_reorder(NAME, sort))) +
geom_bar(position = "dodge", stat = "identity")+
coord_flip()+
theme_minimal()+
scale_fill_manual(values=color_ramp)+
ggtitle("Entries and Exits - 2013-2022")+
theme(legend.position = "bottom")
ggsave("figures/bar_chart.png")
## Saving 10 x 20 in image