plot_custom <- function(
var_name,
facet_title = "",
legend_title = "",
cut_off_val = 1,
transform_factor = 1
){
temp_df <- checkmarks |>
# Inside mutate function, we need to convert var_name from a
# string to a symbol that dplyr can interpret
mutate(!!sym(var_name) := !!sym(var_name) * transform_factor)
# Start the plot
ggplot(
data = temp_df,
mapping = aes(
group = id,
x = week_number,
# x_min = week_number - 0.4,
# x_max = week_number + 0.4,
y = day_of_week,
# y_min = as.numeric(day_of_week) - 0.4,
# y_max = as.numeric(day_of_week) + 0.4,
fill = !!sym(var_name)
)
) +
geom_rtile(
radius = unit(bts / 10, "pt"),
colour = "white"
) +
# Label the best performing days
geom_text(
data = temp_df |> filter(!!sym(var_name) > cut_off_val),
mapping = aes(
label = round(!!sym(var_name), 2)
),
size = bts / 10,
family = "body_font",
hjust = 0.5,
vjust = 0,
nudge_y = 0.05
) +
geom_text(
data = temp_df |> filter(!!sym(var_name) > cut_off_val),
mapping = aes(
label = paste0(
parse_number(date),
" ",
month_year
),
),
size = bts / 15,
family = "body_font",
hjust = 0.5,
vjust = 1,
nudge_y = -0.05
) +
# geom_tile(colour = "white") +
coord_fixed(
clip = "off"
) +
scale_x_continuous(
limits = c(17, 54),
expand = expansion(c(0, 0)),
breaks = c(17, 25, 35, 45, 52),
labels = c("Apr", "Jun", "Sep", "Nov", "Dec")
) +
scale_y_discrete(
breaks = checkmarks$day_of_week |> levels(),
limits = checkmarks$day_of_week |> levels(),
labels = checkmarks$day_of_week |> levels(),
expand = expansion(0)
) +
labs(
x = NULL, y = NULL,
fill = legend_title,
title = facet_title
) +
theme_minimal(
base_family = "body_font",
base_size = bts
) +
theme(
# Overall Plot
legend.position = "bottom",
legend.key.height = unit(bts / 80, "mm"),
legend.key.width = unit(bts / 2, "mm"),
panel.grid = element_blank(),
# All margins
plot.margin = margin(10,-5,5,0, "mm"),
panel.background = element_blank(),
panel.border = element_blank(),
legend.margin = margin(-15,0,-5,0, "mm"),
legend.box.margin = margin(-15,0,-5,5, "mm"),
legend.title.position = "left",
legend.title = element_text(
margin = margin(0,5,2,0, "mm"),
hjust = 0.5
),
legend.text = element_text(
margin = margin(1,0,0,0, "mm")
),
# All texts appearing in the plot
text = element_text(
colour = text_col,
margin = margin(0,0,0,0, "mm"),
hjust = 0.5, vjust = 0.5
),
plot.title = element_text(
margin = margin(0,0,2,0, "mm"),
hjust = 0.5,
colour = text_col,
size = bts * 2,
family = "caption_font"
),
plot.subtitle = element_text(
margin = margin(0,0,0,0, "mm")
),
axis.text = element_text(
margin = margin(0,0,0,0, "mm")
),
axis.title = element_text(
margin = margin(0,0,0,0, "mm")
),
axis.ticks = element_blank(),
axis.ticks.length = unit(0, "mm")
)
}