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 = col_character(),
  SZ = col_character(),
  AG = col_character(),
  Year = col_double(),
  Population = col_double()
)

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=