library(animint2) library(knitr) knit_meta() #either run this function once before knitting animint plots or knit in a clean session
data(worldPop) library(plyr) library(grid) lvls <- ddply(worldPop, "subcontinent", summarise, mean(population))[,1] worldPop$subcontinent <- factor(worldPop$subcontinent, levels = lvls) years <- unique(worldPop["year"]) years <- transform(years, title = factor(sprintf("Population in %d", year)), subcontinent = factor(levels(worldPop$subcontinent)[1]), 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)) popPlots$bars popPlots$lines
structure(popPlots, class = "animint")
## Population barplots broken down by year. popPlots$bars + facet_wrap("year") + theme_bw() + theme(panel.margin = unit(0,"cm"))
## simpler example using make_tallrect. popPlot <- ggplot() + make_tallrect(worldPop, "year") + geom_line(aes(year, population, group = subcontinent), data = worldPop, size = 4) popPlot
structure(list(lines = popPlot, bars = popPlots$bars), class = "animint")
## 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) + geom_line(aes(year, population, group = subcontinent), clickSelects = "subcontinent", data = worldPop, size = 4, alpha = 3/4)) popPlots2
structure(popPlots2, class = "animint")
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) ) popPlots3
structure(popPlots3, class = "animint")
## 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?
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.