Ternære plots
Overview
Teaching: 0 min
Exercises: 0 minQuestions
FIXME
Objectives
FIXME
Sådden nogen her:
Hvis du ved at du har brug for at lave sådan et - så ved du også hvordan du skal aflæse dem. Men vi har lige et eksempel eller to til sidst alligevel.
Vi skal bruge en ekstra pakke, ggtern
.
library(ggtern)
Registered S3 methods overwritten by 'ggtern':
method from
grid.draw.ggplot ggplot2
plot.ggplot ggplot2
print.ggplot ggplot2
--
Remember to cite, run citation(package = 'ggtern') for further info.
--
Attaching package: 'ggtern'
The following objects are masked from 'package:ggplot2':
aes, annotate, ggplot, ggplot_build, ggplot_gtable, ggplotGrob,
ggsave, layer_data, theme_bw, theme_classic, theme_dark,
theme_gray, theme_light, theme_linedraw, theme_minimal, theme_void
Så skal vi bruge noget data der kan plottes på den måde. De kommer oprindeligt herfra: https://ourworldindata.org/electricity-mix
Dem indlæser vi:
elmix <- read_csv("../data/electricity-prod-source.csv")
Rows: 8070 Columns: 15
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): land, code
dbl (13): aar, Coal, Gas, Hydro, Nuclear, Oil, Other_renewables, Solar, Wind...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Du kan finde dem her: (indsæt link når siden er renderet første gang).
Vi kan lave dem på to måder. Enten direkte:
elmix %>%
filter(aar == 2018, land == "Sweden") %>%
ggtern(aes(x=fossil/total,
y = vedvarende/total,
z = kernekraft/total)) +
geom_point()
den ser ud som den gør, fordi fordelingen af elproduktionen i Sverige i 2018 var således:
elmix %>%
filter(aar == 2018, land == "Sweden") %>%
transmute(fossil = fossil/total,
vedvarende = vedvarende/total,
kernekraft = kernekraft/total) %>%
pivot_longer(everything(), names_to = "kilde",
values_to = "andel") %>%
mutate(andel = scales::percent(andel)) %>%
knitr::kable()
|kilde |andel | |:———-|:—–| |fossil |2% | |vedvarende |56% | |kernekraft |42% | I stedet kan vi bruge ggplot (ggtern er baseret på den), og supplere med et nyt koordinatsystem:
tern_plot <- elmix %>%
filter(aar == 2018, land == "Sweden") %>%
ggplot(aes(x=fossil,
y = vedvarende,
z = kernekraft)) +
coord_tern() +
geom_point()
Coordinate system already present. Adding new coordinate system, which will
replace the existing one.
tern_plot
Bemærk også at det ikke var nødvendigt at beregne andelene - det klarer ggtern for os. Det var heller ikke nødvendigt i det første eksempel.
Vi kan bruge andre (men ikke alle) geoms fra ggplot. geom_text til at sætte etiketter på eksempelvis. Vi får advarsler i konsollen hvis vi prøver at gøre noget der ikke er muligt.
ggtern kommer med egne ekstra geoms.
tern_plot + geom_crosshair_tern()
Der kan gøre det lettere at aflæse punkterne. Det er stadig pænt svært at huske hvad der er hvad. ggtern har nogen themes, der kan gøre det lettere:
tern_plot +
geom_crosshair_tern() +
theme_hidetitles() +
theme_showarrows()
Der er mange andre ting gemt i pakken. Læs evt. dokumentationen.
Stier kan bruges til at illustrere hvordan tingene har udviklet sig. Her skal vi huske at der kan optræde NA værdier i datasættet. Dem kan vi ikke plotte. vi bruger geom_path som geom - og smider en pil på, så vi kan se hvilken vej Frankrig bevæger sig.
elmix %>%
filter(land == "France") %>%
filter(complete.cases(.)) %>%
ggplot(aes(x=fossil,
y = vedvarende,
z = kernekraft)) +
geom_path(arrow = arrow(length=unit(.2, "cm"))) +
coord_tern() +
theme_hidetitles() +
theme_showarrows()
Coordinate system already present. Adding new coordinate system, which will
replace the existing one.
Blot som et eksempel på hvad man kan få ud hvis man bruger et par timer på hjælpefilerne:
ggtern(data = data.frame(x = rnorm(100),
y = rnorm(100),
z = rnorm(100)),
aes(x, y, z)) +
stat_density_tern(geom = 'polygon',
n = 200,
aes(fill = ..level..,
alpha = ..level..),
bdl = 0.02) +
geom_point() +
theme_rgbw() +
labs(title = "Example Density/Contour Plot") +
scale_fill_gradient(low = "blue",high = "red") +
guides(color = "none", fill = "none", alpha = "none")
Warning: The dot-dot notation (`..level..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(level)` instead.
ℹ The deprecated feature was likely used in the ggplot2 package.
Please report the issue at <https://github.com/tidyverse/ggplot2/issues>.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
Warning: Removed 93 rows containing non-finite values (`StatDensityTern()`).
Key Points
FIXME