Install and launch R packages
packages = c('ggtern', 'plotly', 'tidyverse')
for(p in packages){
if(!require(p, character.only = T)){
install.packages(p)
}
library(p, character.only = T)
}
#dplyr
#tidy = pivots the comlumns into rows Import data
pop_data <- read_csv("data/respopagsex2000to2018_tidy.csv")
Parsed with column specification:
cols(
PA = [31mcol_character()[39m,
SZ = [31mcol_character()[39m,
AG = [31mcol_character()[39m,
Year = [32mcol_double()[39m,
Population = [32mcol_double()[39m
)
Preparing Data
%>% - pipe allows to create nested formula, creates a virutal file before creating a final output mutate - to create new column or change existing column from num to character spread - is a function from tidy r to reverse pivot the data ( transpose using the age group) rowSum(.[row start: row end])
agpop_mutated <- pop_data %>%
mutate(`Year` = as.character(Year))%>%
spread(AG, Population) %>%
mutate(YOUNG = rowSums(.[4:8]))%>%
mutate(ACTIVE = rowSums(.[9:16])) %>%
mutate(OLD = rowSums(.[17:21])) %>%
mutate(TOTAL = rowSums(.[22:24])) %>%
filter(Year == 2018)%>%
filter(TOTAL > 0)
4.1 Plotting a static ternary diagram
ggtern(data=agpop_mutated, aes(x=YOUNG,y=ACTIVE, z=OLD)) +
geom_point()

#Building the static ternary plot
ggtern(data=agpop_mutated, aes(x=YOUNG,y=ACTIVE, z=OLD)) +
geom_point() +
labs(title="Population structure, 2015") +
theme_rgbw()

4.2 Interactive Ternary Diagram
#plotly - improve graphic interactivity
# reusable function for creating annotation object
label <- function(txt) {
list(
text = txt,
x = 0.1, y = 1,
ax = 0, ay = 0,
xref = "paper", yref = "paper",
align = "center",
font = list(family = "serif", size = 15, color = "white"),
bgcolor = "#b3b3b3", bordercolor = "black", borderwidth = 2
)
}
# reusable function for axis formatting
axis <- function(txt) {
list(
title = txt, tickformat = ".0%", tickfont = list(size = 10)
)
}
ternaryAxes <- list(
aaxis = axis("Young"),
baxis = axis("Active"),
caxis = axis("Old")
)
# Initiating a plotly visualization
plot_ly(
agpop_mutated,
a = ~YOUNG,
b = ~ACTIVE,
c = ~OLD,
color = I("black"),
type = "scatterternary"
) %>%
layout(
annotations = label("Ternary Markers"),
ternary = ternaryAxes
)
No scatterternary mode specifed:
Setting the mode to markers
Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
No scatterternary mode specifed:
Setting the mode to markers
Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
LS0tDQp0aXRsZTogIkluLWNsYXNzIFRlcm5hcnkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpJbnN0YWxsIGFuZCBsYXVuY2ggUiBwYWNrYWdlcw0KDQpgYGB7cn0NCnBhY2thZ2VzID0gYygnZ2d0ZXJuJywgJ3Bsb3RseScsICd0aWR5dmVyc2UnKQ0KDQpmb3IocCBpbiBwYWNrYWdlcyl7DQogIGlmKCFyZXF1aXJlKHAsIGNoYXJhY3Rlci5vbmx5ID0gVCkpew0KICAgIGluc3RhbGwucGFja2FnZXMocCkNCiAgfQ0KICBsaWJyYXJ5KHAsIGNoYXJhY3Rlci5vbmx5ID0gVCkNCn0NCmBgYA0KI2RwbHlyDQoNCiN0aWR5ID0gcGl2b3RzIHRoZSBjb21sdW1ucyBpbnRvIHJvd3MNCkltcG9ydCBkYXRhDQpgYGB7cn0NCnBvcF9kYXRhIDwtIHJlYWRfY3N2KCJkYXRhL3Jlc3BvcGFnc2V4MjAwMHRvMjAxOF90aWR5LmNzdiIpIA0KYGBgDQpQcmVwYXJpbmcgRGF0YQ0KDQolPiUgLSBwaXBlIGFsbG93cyB0byBjcmVhdGUgbmVzdGVkIGZvcm11bGEsIGNyZWF0ZXMgYSB2aXJ1dGFsIGZpbGUgYmVmb3JlIGNyZWF0aW5nIGEgZmluYWwgb3V0cHV0DQptdXRhdGUgLSB0byBjcmVhdGUgbmV3IGNvbHVtbiBvciBjaGFuZ2UgZXhpc3RpbmcgY29sdW1uIGZyb20gbnVtIHRvIGNoYXJhY3Rlcg0Kc3ByZWFkIC0gaXMgYSBmdW5jdGlvbiBmcm9tIHRpZHkgciB0byByZXZlcnNlIHBpdm90IHRoZSBkYXRhICggdHJhbnNwb3NlIHVzaW5nIHRoZSBhZ2UgZ3JvdXApDQpyb3dTdW0oLltyb3cgc3RhcnQ6IHJvdyBlbmRdKQ0KYGBge3J9DQphZ3BvcF9tdXRhdGVkIDwtIHBvcF9kYXRhICU+JQ0KICBtdXRhdGUoYFllYXJgID0gYXMuY2hhcmFjdGVyKFllYXIpKSU+JQ0KICBzcHJlYWQoQUcsIFBvcHVsYXRpb24pICU+JQ0KICBtdXRhdGUoWU9VTkcgPSByb3dTdW1zKC5bNDo4XSkpJT4lDQogIG11dGF0ZShBQ1RJVkUgPSByb3dTdW1zKC5bOToxNl0pKSAgJT4lDQogIG11dGF0ZShPTEQgPSByb3dTdW1zKC5bMTc6MjFdKSkgJT4lDQogIG11dGF0ZShUT1RBTCA9IHJvd1N1bXMoLlsyMjoyNF0pKSAlPiUNCiAgZmlsdGVyKFllYXIgPT0gMjAxOCklPiUNCiAgZmlsdGVyKFRPVEFMID4gMCkNCmBgYA0KDQo0LjEgUGxvdHRpbmcgYSBzdGF0aWMgdGVybmFyeSBkaWFncmFtDQoNCmBgYHtyfQ0KZ2d0ZXJuKGRhdGE9YWdwb3BfbXV0YXRlZCwgYWVzKHg9WU9VTkcseT1BQ1RJVkUsIHo9T0xEKSkgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQpgYGB7Un0NCiNCdWlsZGluZyB0aGUgc3RhdGljIHRlcm5hcnkgcGxvdA0KZ2d0ZXJuKGRhdGE9YWdwb3BfbXV0YXRlZCwgYWVzKHg9WU9VTkcseT1BQ1RJVkUsIHo9T0xEKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBsYWJzKHRpdGxlPSJQb3B1bGF0aW9uIHN0cnVjdHVyZSwgMjAxNSIpICsNCiAgdGhlbWVfcmdidygpDQpgYGANCg0KNC4yIEludGVyYWN0aXZlIFRlcm5hcnkgRGlhZ3JhbQ0KDQojcGxvdGx5IC0gaW1wcm92ZSBncmFwaGljIGludGVyYWN0aXZpdHkNCg0KYGBge1J9DQojIHJldXNhYmxlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbm5vdGF0aW9uIG9iamVjdA0KbGFiZWwgPC0gZnVuY3Rpb24odHh0KSB7DQogIGxpc3QoDQogICAgdGV4dCA9IHR4dCwgDQogICAgeCA9IDAuMSwgeSA9IDEsDQogICAgYXggPSAwLCBheSA9IDAsDQogICAgeHJlZiA9ICJwYXBlciIsIHlyZWYgPSAicGFwZXIiLCANCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJzZXJpZiIsIHNpemUgPSAxNSwgY29sb3IgPSAid2hpdGUiKSwNCiAgICBiZ2NvbG9yID0gIiNiM2IzYjMiLCBib3JkZXJjb2xvciA9ICJibGFjayIsIGJvcmRlcndpZHRoID0gMg0KICApDQp9DQoNCiMgcmV1c2FibGUgZnVuY3Rpb24gZm9yIGF4aXMgZm9ybWF0dGluZw0KYXhpcyA8LSBmdW5jdGlvbih0eHQpIHsNCiAgbGlzdCgNCiAgICB0aXRsZSA9IHR4dCwgdGlja2Zvcm1hdCA9ICIuMCUiLCB0aWNrZm9udCA9IGxpc3Qoc2l6ZSA9IDEwKQ0KICApDQp9DQoNCnRlcm5hcnlBeGVzIDwtIGxpc3QoDQogIGFheGlzID0gYXhpcygiWW91bmciKSwgDQogIGJheGlzID0gYXhpcygiQWN0aXZlIiksIA0KICBjYXhpcyA9IGF4aXMoIk9sZCIpDQopDQoNCiMgSW5pdGlhdGluZyBhIHBsb3RseSB2aXN1YWxpemF0aW9uIA0KcGxvdF9seSgNCiAgYWdwb3BfbXV0YXRlZCwgDQogIGEgPSB+WU9VTkcsIA0KICBiID0gfkFDVElWRSwgDQogIGMgPSB+T0xELCANCiAgY29sb3IgPSBJKCJibGFjayIpLCANCiAgdHlwZSA9ICJzY2F0dGVydGVybmFyeSINCikgJT4lDQogIGxheW91dCgNCiAgICBhbm5vdGF0aW9ucyA9IGxhYmVsKCJUZXJuYXJ5IE1hcmtlcnMiKSwgDQogICAgdGVybmFyeSA9IHRlcm5hcnlBeGVzDQogICkNCmBgYA0KDQoNCg0KDQo=