inst/examples/worldPop.R

library(animint)
data(worldPop)
levs <- levels(worldPop$subcontinent)
subcont.means <- sapply(levs,function(l)mean(worldPop$pop[worldPop$sub==l]))
worldPop$subcontinent <- factor(worldPop$sub, levs[order(subcont.means)])
years <- unique(worldPop[,"year",drop=FALSE])
years$title <- factor(sprintf("Population in %d", years$year))
years$subcontinent <- factor(levels(worldPop$sub)[1])
years$population <- 3e6
## this should be similar to the example on polychartjs.com
popPlots <-
  list(bars=ggplot()+
         geom_bar(aes(x=subcontinent, y=population, showSelected=year),
                  data=worldPop, stat="identity", position="identity")+
         geom_text(aes(x=subcontinent, y=population,
                       label=title, showSelected=year),
                   data=years) +
         coord_flip(),
       lines=ggplot()+
         geom_vline(aes(xintercept=year, clickSelects=year),
                    data=years, alpha=1/2, size=12)+
         geom_line(aes(year, population, group=subcontinent),
                   data=worldPop, alpha=3/4, size=4)+
         geom_point(aes(year, population, fill=type, colour=type),
                    data=worldPop))
info <- gg2animint(popPlots, "worldPop")

## we should at least see the bars in this simpler test.
onebar <- ggplot()+
  geom_bar(aes(subcontinent), data=worldPop)
gg2animint(list(bar=onebar))

## Population barplots broken down by year.
library(grid)
popPlots$bars+
  facet_wrap("year")+
  theme_bw()+
  theme(panel.margin=unit(0,"cm"))

## simpler example using make_tallrect.
data(worldPop)
popPlot <- ggplot()+
  make_tallrect(worldPop, "year")+
  geom_line(aes(year, population, group=subcontinent),
            data=worldPop, size=4)
print(popPlot)

gg2animint(list(lines=popPlot,bars=popPlots$bars))

## Show the currently selected continent on both plots.
popPlots2 <-
  list(bars=ggplot()+
         geom_bar(aes(x=subcontinent, y=population,
                      showSelected=year, clickSelects=subcontinent),
                  data=worldPop, stat="identity", position="identity")+
         geom_text(aes(x=subcontinent, y=population,
                       label=title, showSelected=year),
                   data=years) +
         coord_flip(),
       lines=ggplot()+
         make_tallrect(worldPop, "year")+
         geom_point(aes(year, population, colour=type),
                    data=worldPop, size=4, alpha=1/4)+
         ##scale_colour_manual(values=c("black", "red"))+
         geom_line(aes(year, population, group=subcontinent,
                       clickSelects=subcontinent),
                   data=worldPop, size=4, alpha=3/4))
gg2animint(popPlots2)


library(plyr)
popCumSum <- ddply(worldPop[order(worldPop$year, worldPop$subcontinent),], .(year), transform, 
                   cumPop = cumsum(population)/sum(population), 
                   cumPop.lower = cumsum(c(0, population[-length(population)]))/sum(population))
popCumSum$cumCenter = rowMeans(popCumSum[,c("cumPop", "cumPop.lower")])
popCumSum$subcontinent.names <- factor(as.character(popCumSum$subcontinent)) # alphabetize
popCumSum$subcontinent.lab.height <- 1-as.numeric(popCumSum$subcontinent.names)/15

popPlots3 <-
  list(bars=ggplot()+
         geom_bar(aes(x=subcontinent, y=population,
                      showSelected=year, clickSelects=subcontinent),
                  data=worldPop, stat="identity", position="identity")+
         geom_text(aes(x=subcontinent, y=population,
                       label=title, showSelected=year),
                   data=years) +
         coord_flip(),
       lines=ggplot()+
         make_tallrect(worldPop, "year")+
         geom_line(aes(year, population, group=subcontinent,
                       clickSelects=subcontinent),
                   data=worldPop, size=4, alpha=3/4)+
         geom_point(aes(year, population, colour=type, 
                        clickSelects=subcontinent),
                    data=worldPop, size=4, alpha=.6)+
         scale_colour_manual(values=c("black", "red")),
       stack=ggplot()+ 
         geom_rect(aes(xmin=0, xmax=0.4, ymin=cumPop.lower, ymax=cumPop, fill=factor(subcontinent), 
                       showSelected=year, clickSelects=subcontinent),
                   data=popCumSum, colour="#000000")+
         scale_y_continuous(limits=c(0,1), breaks=c(0, 1), labels=NULL) + 
         scale_x_continuous(labels=NULL) + 
         scale_fill_discrete("Subcontinent") +
         xlab("") + ylab(""),
      width=list(bars = 400, lines = 400, stack = 200), height=list(400)
  )
gg2animint(popPlots3)
## TODO: separate bar stacks for different divisions: What's there replicates polycharts.js, 
## but it's not correct (i.e. N. America and The Americas in the same stack). 

## TODO: figure out how to sort factor order by population for bars?
tdhock/animint documentation built on July 27, 2019, 5:57 a.m.