suppressPackageStartupMessages(library(tidyverse, warn.conflicts = FALSE, quietly = TRUE))
<- saros::ex_survey # Eksempeldata mine_data
Grunnleggende figurer
Alle utkast har forbedringspotensiale
Saros gir kun utkast. Ved nøye justerte innstillinger slipper man å endre på så mye, men kan ta tid å komme til det stadiet. Dessuten, variasjon og tilpasning er viktig. Antar for alle påfølgende eksempler at du har lastet inn tidyverse-pakken, samt et (kapittel)-datasett.
Lage vanlige stolpediagrammer for ordinale (matrise)spørsmål
<- # Prøv å gi et unikt navn til figuren
fig_b_uni_cat_prop_plot |>
mine_data ::embed_cat_prop_plot(dep = b_1:b_3,
sarosdata_label = "percentage_bare",
digits=0) + # Ev. også indep
::scale_fill_nifu("reds") +
nifutheme::labs(fill=NULL)
ggplot2::girafe(ggobj = fig_b_uni_cat_prop_plot) ggiraph
Lage stolpediagram for (matrise)spørsmål der det er avkrysningsbokser (Valgt/Ikke valgt)
Dette skal etter hvert genereres automatisk av Saros dersom man har variabelsett med maks to svarkategorier (+ missing), der man har i 52_ressurser/YAML/report_generation_setup.yaml
<-
fig_a_uni_cat_prop_plot %>% # Bytt ut med eget datasett
mine_data rowwise() %>%
mutate(a_99 = sum(as.integer(c_across(matches("a_[1-9]$")))-1),
across(matches("a_[1-9]$"),
~factor(ifelse(a_99==0,
NA_character_,
as.character(.x)),
levels=c("Yes", "No")))) %>%
ungroup() %>%
::copy_labels_from(mine_data) %>% # Må kopiere tilbake variabeletiketter som forsvinner når man bruker mutate
labelled::embed_cat_prop_plot(dep=matches("a_[1-9]$"),
sarosdata_label="percentage_bare",
digits=0) +
::labs(fill=NULL) +
ggplot2::scale_fill_manual(values = c("No" = "white",
ggplot2"Yes" = "#C84957")) +
::guides(fill = "none")
ggplot2$data <-
fig_a_uni_cat_prop_plot$data %>%
fig_a_uni_cat_prop_plotmutate(.data_label = ifelse(as.character(.category) == "No",
NA, .data_label),
.variable_label = forcats::fct_reorder(.variable_label,
# Sorter etter snittet
.mean)) ::girafe(ggobj = fig_a_uni_cat_prop_plot) ggiraph
Lage boxplot-figur for (matrise)spørsmål med kontinuerlige data
Dette vil i fremtiden genereres automatisk av saros.
<-
fig_c_uni_int_prop_plot %>%
mine_data select(matches("c_")) %>%
::pivot_longer(cols=matches("c_"),
tidyrnames_to = "variable") %>%
left_join(y=labelled::look_for(mine_data,
"c_", details=F),
by="variable") %>%
::separate(col = label,
tidyrsep = " - ",
into = c("prefix", "suffix")) %>%
filter(!is.na(suffix)) %>%
mutate(tooltip = paste0("Snitt = ",
round(mean(value, na.rm=TRUE), 1),
"\nN = ",
sum(!is.na(value))),
.by=c(suffix)) %>%
::ggplot(mapping=ggplot2::aes(x=suffix,
ggplot2y=value,
tooltip=tooltip,
fill = suffix)) +
::geom_boxplot_interactive() +
ggiraph::scale_fill_manual_interactive(name="",
ggiraphvalues=nifutheme::nifu_cols()[c(1,5)],
data_id = function(x) x,
tooltip = function(x) x) +
::guides(fill=ggiraph::guide_legend_interactive()) +
ggplot2::theme(axis.title.x = ggiraph::element_text_interactive(hjust = .5)) +
ggplot2::coord_flip() +
ggplot2::theme_classic() +
ggplot2::labs(x=NULL, y="Years experience")
ggplot2
::girafe(ggobj = fig_c_uni_int_prop_plot) ggiraph
Redigere figurer (fra ggplot2/ggiraph)
For de følgende operasjonene antar vi at figuren heter min_figur, og at alle operasjonene settes inn mellom der du leser inn figuren, og der du viser den frem (siste linjen i chunken). Viser i eksemplene nedenfor kun det som skal settes inn. Som du ser er det egentlig bare vanlige filter, mutate, osv, operasjoner du kjenner fra tidyverse. Forskjellen er at vi gjør endringer på datasettet inni figur-objektet.
<- qs::qread("min_figur.Rds")
min_figur # sett inn etter du har lest inn eksisterende figur, og før du ber ggiraph om å lage den for deg
::girafe(ggobj = min_figur) ggiraph
Fjerne rader fra en figur
<- fig_a_uni_cat_prop_plot
fig_a_uni_cat_prop_plot_minimert $data <-
fig_a_uni_cat_prop_plot_minimert$data %>%
fig_a_uni_cat_prop_plot_minimertfilter(!.variable_name %in% c("a_5", "a_6"))
::wrap_plots(list(Old = fig_a_uni_cat_prop_plot,
patchworkNew = fig_a_uni_cat_prop_plot_minimert),
ncol = 2) %>%
::girafe(ggobj = .) ggiraph
Endre akse-etiketter (dvs. en variabeletikett) i en figur
ex_survey1-datasettet har en skrivefeil, har du oppdaget den?
<- fig_b_uni_cat_prop_plot
fig_b_uni_cat_prop_plot_korrigert $data <-
fig_b_uni_cat_prop_plot_korrigert$data %>%
fig_b_uni_cat_prop_plot_korrigertmutate(.variable_label =
::fct_relabel(
forcats~stringr::str_replace_all(.x,
.variable_label, pattern = "Bejing",
replacement = "Beijing")))
::wrap_plots(Old = fig_b_uni_cat_prop_plot,
patchworkNew = fig_b_uni_cat_prop_plot_korrigert,
ncol = 2) %>%
::girafe(ggobj = .) ggiraph
Reversere vertikalt (snu variablene opp-ned)
Merk at det er x-aksen man reverserer, fordi figuren allerede er snudd om (x=>y, y=>x). Merk at man bruker +
symbolet om du slår sammen figurkomponenter, mens det er %>%
når du piper et datasett.
<- fig_a_uni_cat_prop_plot
fig_a_uni_cat_prop_plot_reversert $data <-
fig_a_uni_cat_prop_plot_reversert$data %>%
fig_a_uni_cat_prop_plot_reversertmutate(.variable_label = forcats::fct_rev(.variable_label))
::wrap_plots(Old = fig_a_uni_cat_prop_plot,
patchworkNew = fig_a_uni_cat_prop_plot_reversert,
ncol = 2) %>%
::girafe(ggobj = .) ggiraph
Skreddersydd sortering av variablene i figuren
Alle som har jobbet litt med ggplot2 vet at det ikke bare er å sortere datasettet man sender til ggplot() - den tar alltid utgangspunkt i factor levels for variabelen (og er det ikke en factor så omgjøres den til det). Trikset er å stille inn rekkefølgen på factor levels manuelt. forcats-pakken har også mange andre funksjoner for å jobbe med factor-variabler!
<- fig_b_uni_cat_prop_plot
fig_b_uni_cat_prop_plot_v2 $data <-
fig_b_uni_cat_prop_plot_v2$data %>%
fig_b_uni_cat_prop_plot_v2mutate(.variable_label =
::fct_relevel(.variable_label,
forcats"Bejing",
"Budapest",
"Brussels"))
::wrap_plots(Old=fig_b_uni_cat_prop_plot,
patchworkNew=fig_b_uni_cat_prop_plot_v2,
ncol=2) %>%
::girafe(ggobj = .) ggiraph
Endre høyden på figuren
Dette er trivielt, bare sjekk innstillingen for figuren. Vil si maks er 20, minimum er 1. Merk at størrelsen først er synlig etter kompilering. Trykker du på forhåndsvisning endres ikke (nødvendigvis) figurens størrelse. Bredde skal du “aldri” justere, det går automatisk.
::girafe(ggobj = fig_b_uni_cat_prop_plot_v2) ggiraph
Få inn all variabeltekst i bivariate stolpediagrammer
Problemer med at noe tekst kuttes av helt til venstre? Sett først makshøyde ovenfor. Så dette, og eventuelt juster
<-
fig_b_bi_catcat_prop_plot |>
mine_data ::embed_cat_prop_plot(dep = b_1:b_3,
sarosindep = x1_sex) +
::scale_fill_nifu("reds") +
nifutheme::labs(fill=NULL) +
ggplot2# Mindre tekst på uavhengig variabel
::theme(axis.text = element_text(size = 6),
ggplot2#Mindre tekst på avhengig variabel (helt til venstre):
strip.text.y = element_text(size = 5),
# Tillat overlapp på avhengig variabel-tekst uten å kutte brått
strip.clip = "off") +
::facet_grid_interactive(rows = vars(.variable_label),
ggiraphswitch = "both",
# Juster 15 til det blir perfekt
labeller = ggplot2::label_wrap_gen(width = 15))
::girafe(ggobj = fig_b_bi_catcat_prop_plot) ggiraph
Få inn hele figurforklaringen i figuren
Med mange svarkategorier, som har lang tekst, så kan det være at siste kategorien kuttes. Det gjelder særlig for docx-versjonen. Prøv følgende:
<-
fig_b_uni_cat_prop_plot_v2 +
fig_b_uni_cat_prop_plot ::guides(fill = ggiraph::guide_legend_interactive(nrow=1,
ggplot2byrow=TRUE,
title = NULL)) + # sett nrow=2 dersom du har mange kategorier
::theme(legend.key.size = ggplot2::unit(4, "mm"), # Litt mindre figurnøkkel (kvadratet med farge i)
ggplot2legend.justification = c(1,0)) # Skyver 1 enhet til venstre. Ofte nok.
::girafe(ggobj = fig_b_uni_cat_prop_plot_v2) ggiraph
Endre fargeskala
Normalt benyttes innstillingene i _52_ressurser/YAML/_report_generation_setup.yaml
slik at colour_palette_nominal:
og colour_palette_ordinal:
brukes for nominelle og ordinale (ordered) variabler, der NIFUs rødtone-mal benyttes for ordinale. Dette kan overstyres for den enkelte figur:
<-
fig_b_uni_cat_prop_plot_blue +
fig_b_uni_cat_prop_plot ::scale_fill_nifu("blues")
nifutheme# Alternativt "main" eller "reds"
::girafe(ggobj = fig_b_uni_cat_prop_plot_blue) ggiraph