library(animint2)
library(ggplot2Animint)
library(gridExtra)
#' Demonstrates axis specification, serves as a tutorial to introduce animint (eventually?)
# Randomly generate some data
scatterdata <- data.frame(x=rnorm(100, 50, 15))
scatterdata$y <- with(scatterdata, runif(100, x-5, x+5))
scatterdata$xnew <- round(scatterdata$x/20)*20
scatterdata$xnew <- as.factor(scatterdata$xnew)
scatterdata$class <- factor(round(scatterdata$x/10)%%2, labels=c("high", "low"))
scatterdata$class4 <- factor(rowSums(sapply(quantile(scatterdata$x)+c(0,0,0,0,.1), function(i) scatterdata$x<i)), levels=1:4, labels=c("high", "medhigh", "medlow", "low"), ordered=TRUE)
#' qplot-style specification works for simple examples,
#' but may not continue to work for more complicated
#' combinations...
#' TODO: Test further.
p <- qplot(data=scatterdata, x=x, y=y, geom="point", colour=floor(x))
# gg2animint(list(p=p))
#' Should use empty ggplot() statement because of structure of ggplot/qplot object
#' Must provide a named list of ggplots.
s1 <- ggplot() + geom_point(data=scatterdata, aes(x=x, y=y)) +
xlab("very long x axis label") +
ylab("very long y axis label") +
ggtitle("Titles are awesome")
s1
# gg2animint(list(s1=s1))
#' Colors, Demonstrates axis -- works with factor data
#' Specify colors using R color names
s2 <- ggplot() + geom_point(data=scatterdata, aes(x=xnew, y=y), colour="blue") +
ggtitle("Colors are cool")
s2
# gg2animint(list(s1=s1, s2=s2))
#' Specify colors manually using hex values
s3 <- ggplot() +
geom_point(data=scatterdata, aes(x=xnew, y=y, colour=class, fill=class)) +
scale_colour_manual(values=c("#FF0000", "#0000FF")) +
scale_fill_manual(values=c("#FF0000", "#0000FF")) +
ggtitle("Manual color/fill scales")
s3
# gg2animint(list(s1=s1, s2=s2, s3=s3))
#' Categorical color scales
s4 <- ggplot() + geom_point(data=scatterdata, aes(x=xnew, y=y, colour=xnew, fill=xnew)) +
ggtitle("Categorical color/fill scales")
s4
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4))
#' Use geom_jitter and color by another variable
s5 <- ggplot() + geom_jitter(data=scatterdata, aes(x=xnew, y=y, colour=class4, fill=class4)) +
ggtitle("geom_jitter")
s5
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5))
#' Color by x*y axis (no binning)
s6 <- ggplot() + geom_point(data=scatterdata, aes(x=x, y=y, color=x*y, fill=x*y)) +
ggtitle("Continuous color scales")
s6
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6))
#' Overplotting data for testing alpha
library(plyr)
scatterdata2 <- data.frame(x=rnorm(1000, 0, .5), y=rnorm(1000, 0, .5))
scatterdata2$quad <- c(3, 4, 2, 1)[with(scatterdata2, (3+sign(x)+2*sign(y))/2+1)]
scatterdata2$quad <- factor(scatterdata2$quad, labels=c("Q1", "Q2", "Q3", "Q4"), ordered=TRUE)
scatterdata2 <- ddply(scatterdata2, .(quad), transform, str=sqrt(x^2+y^2)/4)
scatterdata2.summary <- ddply(scatterdata2, .(quad), summarise, xmin=min(x), xmax=max(x), ymin=min(y), ymax=max(y), xmean=mean(x), ymean=mean(y))
qplot(data=scatterdata2, x=x, y=y, geom="point", colour=quad)
#' Interactive plots...
s7 <- ggplot() +
geom_rect(data=scatterdata2.summary,
aes(xmax=xmax, xmin=xmin, ymax=ymax, ymin=ymin, colour=quad, fill=quad),
clickSelects = "quad", alpha=.3) +
geom_point(data=scatterdata2.summary, aes(x=xmean, y=ymean, colour=quad, fill=quad),
showSelected = "quad", size=5) +
geom_point(data=scatterdata2, aes(x=x, y=y), alpha=.15) +
scale_colour_discrete(guide="legend") + scale_fill_discrete(guide="legend") +
scale_alpha_discrete(guide="none") +
ggtitle("Selects & Means")
s7
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7))
#' Single alpha value
s8 <- ggplot() +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad),alpha=.2)+
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad),
clickSelects="quad", showSelected="quad", alpha=.6) +
guides(colour = guide_legend(override.aes = list(alpha = 1)),
fill = guide_legend(override.aes = list(alpha = 1))) +
ggtitle("Constant alpha")
s8
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7, s8=s8))
#' Continuous alpha
s9 <- ggplot() +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad),alpha=.2)+
geom_point(data=scatterdata2,
aes(x=x, y=y, colour=quad, fill=quad, alpha=str),
clickSelects="quad", showSelected="quad") +
guides(colour = guide_legend(override.aes = list(alpha = 1)),
fill = guide_legend(override.aes = list(alpha = 1))) +
scale_alpha(range=c(.6, 1), guide="none") +
ggtitle("Continuous alpha")
s9
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7, s8=s8, s9=s9))
#' Categorical alpha and scale_alpha_discrete()
#' Note, to get unselected points to show up, need to have two copies of geom_point: One for anything that isn't selected, one for only the selected points.
s10 <- ggplot() +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad, alpha=quad))+
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad, alpha=quad),
clickSelects="quad", showSelected="quad") +
guides(colour = guide_legend(override.aes = list(alpha = 1)),
fill = guide_legend(override.aes = list(alpha = 1))) +
scale_alpha_discrete(guide="none")+
ggtitle("Discrete alpha")
s10
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7, s8=s8, s9=s9, s10=s10))
#' Point Size Scaling
#' Scale defaults to radius, but area is more easily interpreted by the brain (Tufte).
s11 <- ggplot() +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad, size=str), alpha=.5) +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad, size=str),
clickSelects="quad", showSelected="quad", alpha=.3) +
ggtitle("Scale Size")
s11
# gg2animint(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7, s8=s8, s9=s9, s10=s10, s11=s11))
s12 <- ggplot() +
geom_point(data=scatterdata2, aes(x=x, y=y, colour=quad, fill=quad, size=str), alpha=.5) +
scale_size_area() +
ggtitle("Scale Area")
s12
animint2dir(list(s1=s1, s2=s2, s3=s3, s4=s4, s5=s5, s6=s6, s7=s7, s8=s8, s9=s9, s10=s10, s11=s11, s12=s12))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.