epiverse-trace / epiverse-trace/tutorials-late
Add ggplot contact matrix heatmaps to explain symmetry in contact-matrices episode
- Dominant language
- R
- Stars
- 2
- Forks
- 5
- Avg merge
- 4m
- Merged PRs (30d)
- 2
Description
## Context
The `contact-matrices` episode explains symmetric contact matrices but currently lacks a visual comparison that makes the symmetry argument concrete.
The script [`73-socialmixr-ggplot.R`](https://github.com/avallecam/epicatador/blob/main/73-socialmixr-ggplot.R) in `epicatador` has two helper functions (`format_big_mark`, `matrix_to_ggplot`) that produce ggplot heatmaps of the contact matrix.
## Plan
Add a single chunk (on a new branch) that:
1. Defines `format_big_mark()` — formats tile labels as human-readable numbers (K/M).
2. Defines `matrix_to_ggplot()` — converts a contact matrix to a `geom_tile` heatmap using `colorspace::scale_fill_continuous_sequential(palette = "OrYel")`.
3. Produces **two plots** side by side or sequentially:
- **Plot 1:** `contacts_byage$matrix` — mean contacts (asymmetric rates).
- **Plot 2:** `contacts_byage$matrix * contacts_byage$demography$population` — total contacts (symmetric).
The contrast between the two plots makes the symmetry argument visual and explicit.
## Adaptations from source
- Uses standard `contacts_byage` object (already loaded upstream via `contactsurveys` pattern).
- Uses `|>` instead of `%>%`.
- Explicit `pkg::` namespacing.
- No `socialmixr::get_survey()` — survey loaded upstream.
## Dependencies
- `colorspace` (for `scale_fill_continuous_sequential`)
- `scales` (for `label_number`)
- `ggplot2`, `dplyr` (already used in the episode)
Contributor guide
Assessment
This issue has not been assessed yet.