visualizeR/README.md
2023-05-29 11:13:34 +02:00

330 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- README.md is generated from README.Rmd. Please edit that file -->
# visualizeR <img src="man/figures/logo.png" align="right" alt="" width="120"/>
> What a color\! What a viz\!
`visualizeR` proposes some utils to get REACH and AGORA colors,
ready-to-go color palettes, and a few visualization functions
(horizontal hist graph for instance).
## Installation
You can install the last version of visualizeR from
[GitHub](https://github.com/) with:
``` r
# install.packages("devtools")
devtools::install_github("gnoblet/visualizeR", build_vignettes = TRUE)
```
## Roadmap
Roadmap is as follows:
- \[X\] Add IMPACTs colors
- \[X\] Add all color palettes from the internal documentation
- \[ \] There remains to be added more-than-7-color palettes and black
color palettes
- \[X\] Add new types of visualization (e.g. dumbbell plot, lollipop
plot, etc.)
- \[X\] Use examples
- \[ \] Add some ease-map functions
- \[ \] Add some interactive functions (maps and graphs)
- \[ \] Consolidate and make errors transparent
## Request
Please, do not hesitate to pull request any new viz or colors or color
palettes, or to email request any change
(<guillaume.noblet@reach-initiative.org> or <gnoblet@zaclys.net>).
## Colors
Color palettes for REACH, AGORA and IMPACT are available. Functions to
access colors and palettes are `cols_initiative()` or
`pal_initiative()`. For now, the initiative with the most colors and
color palettes is REACH. Feel free to pull requests new AGORA and IMPACT
colors.
``` r
library(visualizeR)
# Get all saved REACH colors, named
cols_reach(unnamed = F)[1:10]
#> white black main_grey main_red main_lt_grey main_beige
#> "#FFFFFF" "#000000" "#58585A" "#EE5859" "#C7C8CA" "#D2CBB8"
#> iroise_1 iroise_2 iroise_3 iroise_4
#> "#DFECEF" "#B1D7E0" "#699DA3" "#236A7A"
# Extract a color palette as hexadecimal codes and reversed
pal_reach(palette = "main", reversed = TRUE, color_ramp_palette = FALSE)
#> [1] "#58585A" "#EE5859" "#C7C8CA" "#D2CBB8"
# Get all color palettes names
pal_reach(show_palettes = T)
#> [1] "main" "primary" "secondary" "two_dots"
#> [5] "two_dots_flashy" "red_main" "red_main_5" "red_alt"
#> [9] "red_alt_5" "iroise" "iroise_5" "discrete_6"
#> [13] "red_2" "red_3" "red_4" "red_5"
#> [17] "red_6" "red_7" "green_2" "green_3"
#> [21] "green_4" "green_5" "green_6" "green_7"
#> [25] "artichoke_2" "artichoke_3" "artichoke_4" "artichoke_5"
#> [29] "artichoke_6" "artichoke_7" "blue_2" "blue_3"
#> [33] "blue_4" "blue_5" "blue_6" "blue_7"
```
## Charts
### Example 1: Bar chart, already REACH themed
``` r
library(visualizeR)
library(palmerpenguins)
library(dplyr)
df <- penguins |>
group_by(island, species) |>
summarize(
mean_bl = mean(bill_length_mm, na.rm = T),
mean_fl = mean(flipper_length_mm, na.rm = T)) |>
ungroup()
# Simple bar chart by group with some alpha transparency
bar(df, island, mean_bl, species, percent = FALSE, alpha = 0.6, x_title = "Mean of bill length")
```
<img src="man/figures/README-example-bar-chart-1.png" width="65%" />
``` r
# Using another color palette through `theme_reach()` and changing scale to percent
bar(df, island,mean_bl, species, percent = TRUE, theme = theme_reach(palette = "artichoke_3"))
```
<img src="man/figures/README-example-bar-chart-2.png" width="65%" />
``` r
# Not flipped, with text added, group_title, no y-axis and no bold for legend
bar(df, island, mean_bl, species, group_title = "Species", flip = FALSE, add_text = TRUE, add_text_suffix = "%", percent = FALSE, theme = theme_reach(text_font_face = "plain", axis_y = FALSE))
```
<img src="man/figures/README-example-bar-chart-3.png" width="65%" />
### Example 2: Point chart, already REACH themed
At this stage, `point_reach()` only supports categorical grouping colors
with the `group` arg.
``` r
# Simple point chart
point(penguins, bill_length_mm, flipper_length_mm)
```
<img src="man/figures/README-example-point-chart-1.png" width="65%" />
``` r
# Point chart with grouping colors, greater dot size, some transparency, reversed color palette
point(penguins, bill_length_mm, flipper_length_mm, island, alpha = 0.6, size = 3, theme = theme_reach(reverse = TRUE))
```
<img src="man/figures/README-example-point-chart-2.png" width="65%" />
``` r
# Using another color palettes
point(penguins, bill_length_mm, flipper_length_mm, island, size = 1.5, x_title = "Bill", y_title = "Flipper", title = "Length (mm)", theme = theme_reach(palette = "artichoke_3", text_font_face = , grid_major_x = TRUE, title_position_to_plot = FALSE))
```
<img src="man/figures/README-example-point-chart-3.png" width="65%" />
### Example 3: Dumbbell plot, REACH themed
Remember to ensure that your data are in the long format and you only
have two groups on the x-axis; for instance, IDP and returnee and no NA
values.
``` r
# Prepare long data
df <- tibble::tibble(
admin1 = rep(letters[1:8], 2),
setting = c(rep(c("Rural", "Urban"), 4), rep(c("Urban", "Rural"), 4)),
stat = rnorm(16, mean = 50, sd = 18)
) |>
dplyr::mutate(stat = round(stat, 0))
# Example, adding a parameter to `theme_reach()` passed on `ggplot2::theme()` to align legend title
dumbbell(df,
stat,
setting,
admin1,
title = "% of HHs that reported open defecation as sanitation facility",
group_y_title = "Admin 1",
group_x_title = "Setting",
theme = theme_reach(legend_position = "bottom",
legend_direction = "horizontal",
legend_title_font_face = "bold",
palette = "primary",
title_position_to_plot = FALSE,
legend.title.align = 0.5)) +
# Change legend title position (could be included as part of the function)
ggplot2::guides(
color = ggplot2::guide_legend(title.position = "left"),
fill = ggplot2::guide_legend(title.position = "left")
)
```
<img src="man/figures/README-example-dumbbell-plot-1.png" width="65%" />
### Example 4: donut chart, REACH themed (to used once, not twice)
``` r
# Some summarized data: % of HHs by displacement status
df <- tibble::tibble(
status = c("Displaced", "Non displaced", "Returnee", "Don't know/Prefer not to say"),
percentage = c(18, 65, 12, 3)
)
# Donut
donut(df,
status,
percentage,
hole_size = 3,
add_text_suffix = "%",
add_text_color = cols_reach("dk_grey"),
add_text_treshold_display = 5,
x_title = "Displacement status",
title = "% of HHs by displacement status",
theme = theme_reach(legend_reverse = TRUE))
```
<img src="man/figures/README-example-donut-plot-1.png" width="65%" />
### Example 5: waffle chart
``` r
#
waffle(df, status, percentage, x_title = "A caption", title = "A title", subtitle = "A subtitle")
```
<img src="man/figures/README-example-waffle-plot-1.png" width="65%" />
### Example 6: alluvial chart, REACH themed
``` r
# Some summarized data: % of HHs by self-reported status of displacement in 2021 and in 2022
df <- tibble::tibble(
status_from = c(rep("Displaced", 4),
rep("Non displaced", 4),
rep("Returnee", 4),
rep("Dnk/Pnts", 4)),
status_to = c("Displaced", "Non displaced", "Returnee", "Dnk/Pnts", "Displaced", "Non displaced", "Returnee", "Dnk/Pnts", "Displaced", "Non displaced", "Returnee", "Dnk/Pnts", "Displaced", "Non displaced", "Returnee", "Dnk/Pnts"),
percentage = c(20, 8, 18, 1, 12, 21, 0, 2, 0, 3, 12, 1, 0, 0, 1, 1)
)
# Alluvial, here the group is the status for 2021
alluvial(df,
status_from,
status_to,
percentage,
status_from,
from_levels = c("Displaced", "Non displaced", "Returnee", "Dnk/Pnts"),
alpha = 0.8,
group_title = "Status for 2021",
title = "% of HHs by self-reported status from 2021 to 2022",
theme = theme_reach(
axis_y = FALSE,
legend_position = "none"))
```
<img src="man/figures/README-example-alluvial-plot-1.png" width="65%" />
### Example 7: lollipop chart
``` r
library(tidyr)
# Prepare long data
df <- tibble::tibble(
admin1 = replicate(15, sample(letters, 8)) |> t() |> as.data.frame() |> unite("admin1", sep = "") |> dplyr::pull(admin1),
stat = rnorm(15, mean = 50, sd = 15)) |>
dplyr::mutate(stat = round(stat, 0))
# Make lollipop plot, REACH themed, vertical with 45 degrees angle X-labels
lollipop(df,
admin1,
stat,
arrange = FALSE,
add_text = FALSE,
flip = FALSE,
y_title = "% of HHs",
x_title = "Admin 1",
title = "% of HHs that reported having received a humanitarian assistance",
theme = theme_reach(axis_text_x_angle = 45,
grid_major_y = TRUE,
grid_major_y_size = 0.2,
grid_major_x = TRUE,
grid_minor_y = TRUE))
```
<img src="man/figures/README-example-lollipop-chart-1.png" width="65%" />
``` r
# Horizontal, greater point size, arranged by value, no grid, and text labels added
lollipop(df,
admin1,
stat,
arrange = TRUE,
point_size = 10,
point_color = cols_reach("main_beige"),
segment_size = 2,
add_text = TRUE,
add_text_suffix = "%",
y_title = "% of HHs",
x_title = "Admin 1",
title = "% of HHs that reported having received a humanitarian assistance in the 12 months prior to the assessment",
theme = theme_reach(title_position_to_plot = FALSE))
```
<img src="man/figures/README-example-lollipop-chart-2.png" width="65%" />
## Maps
``` r
# Add indicator layer
# - based on "pretty" classes and title "Proportion (%)"
# - buffer to add a 10% around the bounding box
map <- add_indicator_layer(
indicator_admin1,
opn_dfc,
buffer = 0.1) +
# Layout - some defaults - add the map title
add_layout("% of HH that reported open defecation as sanitation facility") +
# Admin boundaries as list of shape files (lines) and colors, line widths and labels as vectors
add_admin_boundaries(
lines = list(line_admin1, border_admin0, frontier_admin0),
colors = cols_reach("main_lt_grey", "dk_grey", "black"),
lwds = c(0.5, 2, 3),
labels = c("Department", "Country", "Dominican Rep. frontier"),
title = "Administrative boundaries") +
# Add text labels - centered on admin 1 centroids
add_admin_labels(centroid_admin1, ADM1_FR_UPPER) +
# Add a compass
add_compass() +
# Add a scale bar
add_scale_bar() +
# Add credits
add_credits("Admin. boundaries. : CNIGS \nCoord. system: GCS WGS 1984")
```
![Once exported with
`tmap::tmap_save()`.](man/figures/README-example-map.png)