mirror of
https://github.com/dylanbenzi/hurricane_normalization_app.git
synced 2026-07-30 05:08:57 +00:00
add better map rendering
This commit is contained in:
+83
-33
@@ -31,6 +31,8 @@ library(knitr)
|
|||||||
library(kableExtra)
|
library(kableExtra)
|
||||||
library(patchwork)
|
library(patchwork)
|
||||||
library(lubridate)
|
library(lubridate)
|
||||||
|
library(ggrepel)
|
||||||
|
library(ggtext)
|
||||||
|
|
||||||
source(file = "queries.R")
|
source(file = "queries.R")
|
||||||
|
|
||||||
@@ -294,7 +296,7 @@ storm_track %>%
|
|||||||
) %>%
|
) %>%
|
||||||
kable_styling(
|
kable_styling(
|
||||||
#latex_options = c("striped"),
|
#latex_options = c("striped"),
|
||||||
font_size = 9,
|
font_size = 11,
|
||||||
position = "center"
|
position = "center"
|
||||||
) %>%
|
) %>%
|
||||||
column_spec(
|
column_spec(
|
||||||
@@ -372,7 +374,7 @@ for(lf in unique_lf_ids) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
mmh_plot <- ggplot(filtered_costs, aes(x = normalization_year, y = mmh_loss)) +
|
mmh_plot <- ggplot(filtered_costs, aes(x = normalization_year, y = mmh_loss)) +
|
||||||
geom_area(fill = "blue", alpha = 0.7) +
|
geom_line(color = "blue") +
|
||||||
scale_y_continuous(labels = scales::label_dollar(scale_cut = cut_short_scale())) +
|
scale_y_continuous(labels = scales::label_dollar(scale_cut = cut_short_scale())) +
|
||||||
labs(
|
labs(
|
||||||
title = paste(lf, "MMH Loss"),
|
title = paste(lf, "MMH Loss"),
|
||||||
@@ -383,7 +385,7 @@ for(lf in unique_lf_ids) {
|
|||||||
plot_theme
|
plot_theme
|
||||||
|
|
||||||
mmp_plot <- ggplot(filtered_costs, aes(x = normalization_year, y = mmp_loss)) +
|
mmp_plot <- ggplot(filtered_costs, aes(x = normalization_year, y = mmp_loss)) +
|
||||||
geom_area(fill = "red", alpha = 0.7) +
|
geom_line(color = "red") +
|
||||||
scale_y_continuous(labels = scales::label_dollar(scale_cut = cut_short_scale())) +
|
scale_y_continuous(labels = scales::label_dollar(scale_cut = cut_short_scale())) +
|
||||||
labs(
|
labs(
|
||||||
title = paste(lf, "MMP Loss"),
|
title = paste(lf, "MMP Loss"),
|
||||||
@@ -402,6 +404,7 @@ for(lf in unique_lf_ids) {
|
|||||||
|
|
||||||
```{r growth, echo=FALSE}
|
```{r growth, echo=FALSE}
|
||||||
#| out-width: "100%"
|
#| out-width: "100%"
|
||||||
|
#| fig-align: "left"
|
||||||
|
|
||||||
for(lf in unique_lf_ids) {
|
for(lf in unique_lf_ids) {
|
||||||
growth <- get_normalized_metric_growth(storm, lf) %>%
|
growth <- get_normalized_metric_growth(storm, lf) %>%
|
||||||
@@ -431,15 +434,32 @@ for(lf in unique_lf_ids) {
|
|||||||
lon_range <- c(bbox["xmin"], bbox["xmax"])
|
lon_range <- c(bbox["xmin"], bbox["xmax"])
|
||||||
lat_range <- c(bbox["ymin"], bbox["ymax"])
|
lat_range <- c(bbox["ymin"], bbox["ymax"])
|
||||||
|
|
||||||
|
lon_width <- diff(lon_range)
|
||||||
|
lat_height <- diff(lat_range)
|
||||||
|
|
||||||
|
target_ratio <- 16/9
|
||||||
|
current_ratio <- lon_width / lat_height
|
||||||
|
|
||||||
|
if (current_ratio < target_ratio) {
|
||||||
|
needed_width <- lat_height * target_ratio
|
||||||
|
extra_width <- (needed_width - lon_width) / 2
|
||||||
|
lon_range <- c(lon_range[1] - extra_width, lon_range[2] + extra_width)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current_ratio > target_ratio) {
|
||||||
|
needed_height <- lon_width / target_ratio
|
||||||
|
extra_height <- (needed_height - lat_height) / 2
|
||||||
|
lat_range <- c(lat_range[1] - extra_height, lat_range[2] + extra_height)
|
||||||
|
}
|
||||||
|
|
||||||
padding_percent <- 0.1
|
padding_percent <- 0.1
|
||||||
|
|
||||||
lon_padding <- diff(lon_range) * padding_percent
|
lon_padding <- diff(lon_range) * padding_percent
|
||||||
lat_padding <- diff(lat_range) * padding_percent
|
lat_padding <- diff(lat_range) * padding_percent
|
||||||
|
|
||||||
h_growth <- ggplot() +
|
base_growth_map <- ggplot() +
|
||||||
geom_sf(data = world, fill = "#E5E5E5", color = "#999999", size = 0.3) +
|
geom_sf(data = world, fill = "#e5e5e5", color = "#999999", size = 0.3) +
|
||||||
geom_sf(data = states, fill = NA, color = "#CCCCCC", size = 0.2) +
|
geom_sf(data = states, fill = NA, color = "#cccccc", size = 0.2) +
|
||||||
geom_sf(data = growth_sf, fill = "blue", color = "blue", alpha = growth_sf$housing_opacity) +
|
|
||||||
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
||||||
coord_sf(
|
coord_sf(
|
||||||
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
||||||
@@ -449,17 +469,22 @@ for(lf in unique_lf_ids) {
|
|||||||
labs(
|
labs(
|
||||||
x = "",
|
x = "",
|
||||||
y = ""
|
y = ""
|
||||||
)
|
|
||||||
theme_minimal() +
|
|
||||||
theme(
|
|
||||||
panel.background = element_rect(fill = "#D4E6F1"),
|
|
||||||
panel.grid.major = element_line(color = "#BBBBBB", size = 0.2),
|
|
||||||
legend.position = "right",
|
|
||||||
legend.key.size = unit(0.4, "cm"),
|
|
||||||
legend.text = element_text(size = 8)
|
|
||||||
) +
|
) +
|
||||||
|
theme_minimal() +
|
||||||
plot_theme
|
plot_theme
|
||||||
|
|
||||||
|
h_growth_map <- base_growth_map +
|
||||||
|
geom_sf(data = growth_sf, fill = "blue", color = "#e5e5e5", size = 0.5, alpha = growth_sf$housing_opacity) +
|
||||||
|
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
||||||
|
labs(
|
||||||
|
title = paste(lf, "Housing Growth Map By County"),
|
||||||
|
) +
|
||||||
|
coord_sf(
|
||||||
|
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
||||||
|
ylim = c(lat_range[1] - lat_padding, lat_range[2] + lat_padding),
|
||||||
|
expand = FALSE
|
||||||
|
)
|
||||||
|
|
||||||
latest_opacity <- growth %>%
|
latest_opacity <- growth %>%
|
||||||
filter(year == max(year)) %>%
|
filter(year == max(year)) %>%
|
||||||
select(county_fips, name, housing_opacity, population_opacity)
|
select(county_fips, name, housing_opacity, population_opacity)
|
||||||
@@ -480,28 +505,47 @@ for(lf in unique_lf_ids) {
|
|||||||
growth_colored <- growth_colored %>%
|
growth_colored <- growth_colored %>%
|
||||||
mutate(name = factor(name, levels = housing_colors$name))
|
mutate(name = factor(name, levels = housing_colors$name))
|
||||||
|
|
||||||
mmh_plot <- ggplot(growth_colored, aes(x = year, y = normalized_housing,
|
h_plot <- ggplot(growth_colored, aes(x = year, y = normalized_housing,
|
||||||
color = name,
|
color = name,
|
||||||
group = county_fips)) +
|
group = county_fips)) +
|
||||||
geom_line() +
|
geom_line() +
|
||||||
scale_color_manual(values = housing_color_values) +
|
scale_color_manual(values = housing_color_values) +
|
||||||
guides(color = guide_legend(override.aes = list(linewidth = 3))) +
|
geom_text(
|
||||||
|
data = growth_colored %>% filter(year == max(year)),
|
||||||
|
aes(label = name, x = year + 1),
|
||||||
|
hjust = 0,
|
||||||
|
size = 3
|
||||||
|
) +
|
||||||
|
coord_cartesian(clip = "off") +
|
||||||
|
guides(color = "none") +
|
||||||
labs(
|
labs(
|
||||||
title = paste(lf, "Housing Growth"),
|
title = paste(lf, "Housing Growth"),
|
||||||
x = "Year",
|
x = "Year",
|
||||||
y = "Normalized Growth",
|
y = "Normalized Growth"
|
||||||
color = "County"
|
|
||||||
) +
|
) +
|
||||||
theme_minimal() +
|
theme_minimal() +
|
||||||
plot_theme
|
plot_theme +
|
||||||
|
theme(plot.margin = margin(5.5, 40, 5.5, 5.5))
|
||||||
|
|
||||||
print(h_growth)
|
print(h_growth_map)
|
||||||
print(mmh_plot)
|
print(h_plot)
|
||||||
|
|
||||||
|
p_growth_map <- base_growth_map +
|
||||||
|
geom_sf(data = growth_sf, fill = "red", color = "#e5e5e5", size = 0.5, alpha = growth_sf$population_opacity) +
|
||||||
|
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
||||||
|
labs(
|
||||||
|
title = paste(lf, "Population Growth Map By County"),
|
||||||
|
) +
|
||||||
|
coord_sf(
|
||||||
|
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
||||||
|
ylim = c(lat_range[1] - lat_padding, lat_range[2] + lat_padding),
|
||||||
|
expand = FALSE
|
||||||
|
)
|
||||||
|
|
||||||
p_growth <- ggplot() +
|
p_growth <- ggplot() +
|
||||||
geom_sf(data = world, fill = "#E5E5E5", color = "#999999", size = 0.3) +
|
geom_sf(data = world, fill = "#E5E5E5", color = "#999999", size = 0.3) +
|
||||||
geom_sf(data = states, fill = NA, color = "#CCCCCC", size = 0.2) +
|
geom_sf(data = states, fill = NA, color = "#CCCCCC", size = 0.2) +
|
||||||
geom_sf(data = growth_sf, fill = "red", color = "red", alpha = growth_sf$population_opacity) +
|
geom_sf(data = growth_sf, fill = "red", color = "#E5E5E5", size = 0.5, alpha = growth_sf$population_opacity) +
|
||||||
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
geom_sf_label(data = growth_sf, aes(label = growth_sf$name)) +
|
||||||
coord_sf(
|
coord_sf(
|
||||||
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
xlim = c(lon_range[1] - lon_padding, lon_range[2] + lon_padding),
|
||||||
@@ -509,6 +553,7 @@ for(lf in unique_lf_ids) {
|
|||||||
expand = FALSE
|
expand = FALSE
|
||||||
) +
|
) +
|
||||||
labs(
|
labs(
|
||||||
|
title = paste(lf, "Housing Growth Map By County"),
|
||||||
x = "",
|
x = "",
|
||||||
y = ""
|
y = ""
|
||||||
)
|
)
|
||||||
@@ -516,9 +561,6 @@ for(lf in unique_lf_ids) {
|
|||||||
theme(
|
theme(
|
||||||
panel.background = element_rect(fill = "#D4E6F1"),
|
panel.background = element_rect(fill = "#D4E6F1"),
|
||||||
panel.grid.major = element_line(color = "#BBBBBB", size = 0.2),
|
panel.grid.major = element_line(color = "#BBBBBB", size = 0.2),
|
||||||
legend.position = "right",
|
|
||||||
legend.key.size = unit(0.4, "cm"),
|
|
||||||
legend.text = element_text(size = 8)
|
|
||||||
) +
|
) +
|
||||||
plot_theme
|
plot_theme
|
||||||
|
|
||||||
@@ -535,22 +577,30 @@ for(lf in unique_lf_ids) {
|
|||||||
growth_colored <- growth_colored %>%
|
growth_colored <- growth_colored %>%
|
||||||
mutate(name = factor(name, levels = population_colors$name))
|
mutate(name = factor(name, levels = population_colors$name))
|
||||||
|
|
||||||
mmp_plot <- ggplot(growth_colored, aes(x = year, y = normalized_population,
|
p_plot <- ggplot(growth_colored, aes(x = year, y = normalized_population,
|
||||||
color = name,
|
color = name,
|
||||||
group = county_fips)) +
|
group = county_fips)) +
|
||||||
geom_line() +
|
geom_line() +
|
||||||
scale_color_manual(values = population_color_values) +
|
scale_color_manual(values = population_color_values) +
|
||||||
guides(color = guide_legend(override.aes = list(linewidth = 3))) +
|
geom_text(
|
||||||
|
data = growth_colored %>% filter(year == max(year)),
|
||||||
|
aes(label = name, x = year + 1),
|
||||||
|
hjust = 0,
|
||||||
|
size = 3
|
||||||
|
) +
|
||||||
|
coord_cartesian(clip = "off") +
|
||||||
|
guides(color = "none") +
|
||||||
labs(
|
labs(
|
||||||
title = paste(lf, "Population Growth"),
|
title = paste(lf, "Population Growth"),
|
||||||
x = "Year",
|
x = "Year",
|
||||||
y = "Normalized Growth",
|
y = "Normalized Growth"
|
||||||
color = "County"
|
|
||||||
) +
|
) +
|
||||||
theme_minimal() +
|
theme_minimal() +
|
||||||
plot_theme
|
plot_theme +
|
||||||
|
theme(plot.margin = margin(5.5, 40, 5.5, 5.5))
|
||||||
|
|
||||||
print(p_growth)
|
|
||||||
print(mmp_plot)
|
print(p_growth_map)
|
||||||
|
print(p_plot)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Reference in New Issue
Block a user