### R code from vignette source 'xkcd-intro.Rnw' ### Encoding: UTF-8 ################################################### ### code chunk number 1: packages (eval = FALSE) ################################################### ## install.packages(c("xkcd","splancs","reshape"), dependencies=TRUE) ################################################### ### code chunk number 2: fonts (eval = FALSE) ################################################### ## library(extrafont) ## library(ggplot2) ## if( 'xkcd' %in% fonts()) { ## p <- ggplot() + geom_point(aes(x=mpg, y=wt), data=mtcars) + ## theme(text = element_text(size = 16, family = "xkcd")) ## } else { ## warning("Not xkcd fonts installed!") ## p <- ggplot() + geom_point(aes(x=mpg, y=wt), data=mtcars) ## } ## p ################################################### ### code chunk number 3: xkcd-intro.Rnw:152-157 (eval = FALSE) ################################################### ## p <- ggplot() + geom_point(aes(x=mpg, y=wt), data=mtcars) ## ggsave("grnofonts.png",p) ## p <- ggplot() + geom_point(aes(x=mpg, y=wt), data=mtcars) + ## theme(text = element_text(size = 16, family = "xkcd")) ## ggsave("grfonts.png",p) ################################################### ### code chunk number 4: xkcd-intro.Rnw:185-199 (eval = FALSE) ################################################### ## library(extrafont) ## download.file("http://simonsoftware.se/other/xkcd.ttf", ## dest="xkcd.ttf", mode="wb") ## system("mkdir ~/.fonts") ## system("cp xkcd.ttf ~/.fonts") ## font_import(pattern = "[X/x]kcd", prompt=FALSE) ## fonts() ## fonttable() ## if(.Platform$OS.type != "unix") { ## ## Register fonts for Windows bitmap output ## loadfonts(device="win") ## } else { ## loadfonts() ## } ################################################### ### code chunk number 5: xkcd-intro.Rnw:208-209 (eval = FALSE) ################################################### ## ggsave("gr1.png", p) ################################################### ### code chunk number 6: embedfonts (eval = FALSE) ################################################### ## ggsave("gr1.pdf", plot=p, width=12, height=4) ## if(.Platform$OS.type != "unix") { ## ## Needed for Windows. Make sure you have the correct path ## Sys.setenv(R_GSCMD = ## "C:\\Program Files (x86)\\gs\\gs9.06\\bin\\gswin32c.exe") ## } ## embed_fonts("gr1.pdf") ################################################### ### code chunk number 7: xkcd-intro.Rnw:236-237 (eval = FALSE) ################################################### ## install.packages("xkcd",dependencies = TRUE) ################################################### ### code chunk number 8: xkcd-intro.Rnw:241-244 (eval = FALSE) ################################################### ## help(package="xkcd") ## vignette("xkcd-intro") # It opens the PDF ## browseVignettes(package = "xkcd") # To browse the PDF, R and Rnw ################################################### ### code chunk number 9: library (eval = FALSE) ################################################### ## library(xkcd) ################################################### ### code chunk number 10: axis (eval = FALSE) ################################################### ## xrange <- range(mtcars$mpg) ## yrange <- range(mtcars$wt) ## set.seed(123) # for reproducibility ## p <- ggplot() + geom_point(aes(mpg, wt), data=mtcars) + ## xkcdaxis(xrange,yrange) ## p ################################################### ### code chunk number 11: xkcd-intro.Rnw:268-269 (eval = FALSE) ################################################### ## ggsave("graxis.png",p) ################################################### ### code chunk number 12: stickfigure (eval = FALSE) ################################################### ## ratioxy <- diff(xrange)/diff(yrange) ## mapping <- aes(x, y, scale, ratioxy, angleofspine, ## anglerighthumerus, anglelefthumerus, ## anglerightradius, angleleftradius, ## anglerightleg, angleleftleg, angleofneck, ## linetype=city) ## ## dataman <- data.frame(x= c(15,30), y=c(3, 4), ## scale = c(0.3,0.51) , ## ratioxy = ratioxy, ## angleofspine = -pi/2 , ## anglerighthumerus = c(pi/4, -pi/6), ## anglelefthumerus = c(pi/2 + pi/4, pi +pi/6), ## anglerightradius = c(pi/3, -pi/3), ## angleleftradius = c(pi/3, -pi/3), ## anglerightleg = 3*pi/2 - pi / 12, ## angleleftleg = 3*pi/2 + pi / 12 , ## angleofneck = runif(1, 3*pi/2-pi/10, 3*pi/2+pi/10), ## city=c("Liliput","Brobdingnag")) ## ## p <- ggplot() + geom_point(aes(mpg, wt, colour=as.character(vs)), data=mtcars) + ## xkcdaxis(xrange,yrange) + ## xkcdman(mapping, dataman) ## p ################################################### ### code chunk number 13: xkcd-intro.Rnw:322-323 (eval = FALSE) ################################################### ## ggsave("grstickfigure.png",p) ################################################### ### code chunk number 14: xkcd-intro.Rnw:327-328 (eval = FALSE) ################################################### ## p + facet_grid(.~vs) ################################################### ### code chunk number 15: caritas (eval = FALSE) ################################################### ## volunteers <- data.frame(year=c(2007:2011), ## number=c(56470, 56998, 59686, 61783, 64251)) ## xrange <- range(volunteers$year) ## yrange <- range(volunteers$number) ## ratioxy <- diff(xrange) / diff(yrange) ## ## datalines <- data.frame(xbegin=c(2008.3,2010.5),ybegin=c(63000,59600), ## xend=c(2008.5,2010.3), yend=c(63400,59000)) ## ## mapping <- aes(x, y, scale, ratioxy, angleofspine, ## anglerighthumerus, anglelefthumerus, ## anglerightradius, angleleftradius, ## anglerightleg, angleleftleg, angleofneck) ## ## dataman <- data.frame( x= c(2008,2010), y=c(63000, 58850), ## scale = 1000 , ## ratioxy = ratioxy, ## angleofspine = -pi/2 , ## anglerighthumerus = c(-pi/6, -pi/6), ## anglelefthumerus = c(-pi/2 - pi/6, -pi/2 - pi/6), ## anglerightradius = c(pi/5, -pi/5), ## angleleftradius = c(pi/5, -pi/5), ## angleleftleg = 3*pi/2 + pi / 12 , ## anglerightleg = 3*pi/2 - pi / 12, ## angleofneck = runif(1, 3*pi/2-pi/10, 3*pi/2+pi/10)) ## ## p <- ggplot() + geom_smooth(mapping=aes(x=year, y =number), ## data =volunteers, method="loess") + ## xkcdaxis(xrange,yrange) + ## ylab("Volunteers at Caritas Spain") + ## xkcdman(mapping, dataman) + ## annotate("text", x=2008.7, y = 63700, ## label = "We Need\nVolunteers!", family="xkcd" ) + ## annotate("text", x=2010.5, y = 60000, ## label = "Sure\nI can!", family="xkcd" ) + ## xkcdline(aes(xbegin=xbegin,ybegin=ybegin,xend=xend,yend=yend), ## datalines, xjitteramount = 0.12) ## p # Figure 5.a ################################################### ### code chunk number 16: xkcd-intro.Rnw:396-397 (eval = FALSE) ################################################### ## ggsave("grcaritas.png",p) ################################################### ### code chunk number 17: barchart (eval = FALSE) ################################################### ## data <- volunteers ## data$xmin <- data$year - 0.1 ## data$xmax <- data$year + 0.1 ## data$ymin <- 50000 ## data$ymax <- data$number ## xrange <- range(min(data$xmin)-0.1, max(data$xmax) + 0.1) ## yrange <- range(min(data$ymin)+500, max(data$ymax) + 1000) ## ## mapping <- aes(xmin=xmin,ymin=ymin,xmax=xmax,ymax=ymax) ## p <- ggplot() + xkcdrect(mapping,data) + ## xkcdaxis(xrange,yrange) + ## xlab("Year") + ylab("Volunteers at Caritas Spain") ## p # Figure 5.b ################################################### ### code chunk number 18: xkcd-intro.Rnw:419-420 (eval = FALSE) ################################################### ## ggsave("grbar.png",p) ################################################### ### code chunk number 19: help (eval = FALSE) ################################################### ## library(zoo) ## library(xkcd) ## require(splancs) #install.packages("splancs", dependencies = TRUE, repos="http://cran.es.r-project.org/") ## ## mydatar <- read.table(text=" ## 6.202 ## 5.965 ## 5.778 ## 5.693 ## 5.639 ## 5.273 ## 4.978 ## 4.833 ## 4.910 ## 4.696 ## 4.574 ## 4.645 ## 4.612 ## ") ## ## mydata1 <- mydatar[dim(mydatar)[1]:1,] ## z <- zooreg(mydata1, end = as.yearqtr("2013-1"), frequency = 4) ## z ## ## ## mydata <- data.frame(parados=z) ## mydata$year <- as.numeric(as.Date(as.yearqtr(rownames(mydata)))) ## mydata$label <- paste(substr(rownames(mydata),3,4),substr(rownames(mydata),6,7),sep="") ## ## data <- mydata ## data$xmin <- as.numeric(data$year) -1 ## data$xmax <- data$xmin + 90 ## data$ymin <- 4.5 ## data$ymax <- data$parados ## ## n <- 3200 ## poligono <- mydata[,c("year","parados")] ## names(poligono) <- c("x","y") ## poligono <- rbind(poligono, c(max(poligono$x),4.4)) ## poligono <- rbind(poligono, c(min(poligono$x),4.4)) ## points <- data.frame(x=runif(n,range(poligono$x)[1],range(poligono$x)[2] ), ## y=runif(n,range(poligono$y)[1],range(poligono$y)[2] )) ## kk <- inout(points, poligono) ## points <- points[kk, ] ## points <- rbind(points,poligono) ## ## x <- points$x ## y <- points$y ## nman <- length(x) ## sizer <-runif(nman, 4, 6) ## nman ## ## xrange <- c(min(x),max(x)) ## yrange <- c(min(y),max(y)) ## ratioxy <- diff(xrange)/diff(yrange) ## ## n <- 2 ## set.seed(123) ## twomen <- xkcdman(mapping= aes(x, y, ## scale, ## ratioxy, ## angleofspine , ## anglerighthumerus, ## anglelefthumerus, ## anglerightradius, ## angleleftradius, ## anglerightleg, ## angleleftleg, ## angleofneck), ## data.frame(x=c(15600, 14800) , ## y=c(5.3, 5.7), ## scale = 0.2, ## ratioxy = ratioxy, ## angleofspine = runif(n, - pi/2 - pi/10, -pi/2 + pi/10), ## anglerighthumerus = runif(n, -pi/6- pi/10, - pi/6 + pi/10), ## anglelefthumerus = runif(n, pi + pi/6 -pi/10, pi + pi/6 + pi/10), ## anglerightradius = runif(n, -pi/4, pi/4), ## angleleftradius = runif(n, pi -pi/4, pi + pi/4), ## anglerightleg = runif(n, 3* pi/2 + pi/12 , 3* pi/2 + pi/12 + pi/10), ## angleleftleg = runif(n, 3* pi/2 - pi/12 - pi/10, 3* pi/2 - pi/12 ), ## angleofneck = runif(n, -pi/2-pi/10, -pi/2 + pi/10))) ## ## p1 <- ggplot() + geom_text(aes(x,y,label="0"), data.frame(x=x,y=y),family="xkcd",alpha=0.4,size=sizer) + xkcdaxis(xrange,yrange) + ## ylab("Unemployed persons (millions)") + xlab("Date") + ## twomen + ## annotate("text", x= 15250, y=5.95,label="Help!", family="xkcd",size=7) + ## xkcdline(aes(xbegin=xbegin,ybegin=ybegin,xend=xend,yend=yend), ## data=data.frame( xbegin=15600, ybegin=5.42, xend=15250, yend=5.902 ) ## , xjitteramount = 200) + theme(legend.position="none") ## #p1 ## p2 <- p1 + scale_x_continuous(breaks=as.numeric(mydata$year),label=mydata$label) ## p2 ## ## ggsave("grhelp.png") ## ################################################### ### code chunk number 20: homosapiens (eval = FALSE) ################################################### ## library(reshape) ## ## mydata <- read.table(header=TRUE,sep=",",text=" ## year,ministerio,banco,fmi,homo ## 2013,2,1.95,1.96,1.94 ## 2014,2.1,1.97,1.93,1.88 ## 2015,2.2,2.05,1.90,1.87 ## ") ## mydatalong <- melt(mydata, id="year", measure.vars= names(mydata)[-1]) ## ## xrange <- c(2013,2015) ## yrange <- c(1.86,2.21) ## set.seed(123) ## ##p <- ggplot() + geom_smooth(aes(x=year, y=value, group=variable,linetype=variable), data=mydatalong, position = position_jitter(h=0.0001),color="black") + theme(legend.position = "none") + xkcdaxis(xrange,yrange) ## p <- ggplot() + geom_smooth(aes(x=year, y=value, group=variable,linetype=variable), data=mydatalong,color="black") + theme(legend.position = "none") + xkcdaxis(xrange,yrange) ## p2 <- p + ylab("Change in real GDP (%)") + xlab("Economic Projections of several Institutes") + scale_x_continuous(breaks=c(mydata$year), labels=c(mydata$year)) ## datalabel <- data.frame(x=2014.95, ## y=t(mydata[mydata$year==2015,c(2,3,4,5)]), ## label=c("Ministry of Economy","National Bank","International Monetary Fund","Homo Sapiens Sapiens*")) ## names(datalabel) <- c("x","y","label") ## ## p3 <- p2 + geom_text(aes(x=x,y=y,label=label), data=datalabel, hjust=1, vjust=1,family="xkcd",size=7) + ## annotate("text", x=2013.4, y=1.852, label="*Homo Sapiens Sapiens = Doubly Wise Man",family="xkcd",size=3.5) ## ggsave("grhomosapiens.png",p3) ################################################### ### code chunk number 21: sevan (eval = FALSE) ################################################### ## resumen <- ## structure(list(tonombre = structure(c(1L, 2L, 3L, 11L, 4L, 5L, ## 8L, 6L, 7L, 9L, 10L, 14L, 12L, 13L, 15L), .Label = c("Andalucía", ## "Aragón", "Asturias", "Canarias", "Cantabria", "C-LaMancha", ## "CyLeón", "Cataluña", "Extremadura", "Galicia", "Baleares", ## "Madrid", "Murcia", "La Rioja", "Valencia"), class = "factor"), ## persons = c(2743706L, 515772L, 364410L, 399963L, 699410L, ## 212737L, 2847377L, 717874L, 894946L, 371502L, 942277L, 119341L, ## 2561918L, 493833L, 1661613L), frompersons = c(14266L, 3910L, ## 3214L, 3283L, 4371L, 1593L, 10912L, 8931L, 9566L, 3231L, ## 5407L, 940L, 21289L, 3202L, 9939L), topersons = c(10341L, ## 3805L, 2523L, 4039L, 3911L, 1524L, 12826L, 10897L, 7108L, ## 2312L, 4522L, 1066L, 26464L, 3529L, 9187L), llegan = c(0.38, ## 0.74, 0.69, 1.01, 0.56, 0.72, 0.45, 1.52, 0.79, 0.62, 0.48, ## 0.89, 1.03, 0.71, 0.55), sevan = c(0.52, 0.76, 0.88, 0.82, ## 0.62, 0.75, 0.38, 1.24, 1.07, 0.87, 0.57, 0.79, 0.83, 0.65, ## 0.6)), .Names = c("tonombre", "persons", "frompersons", "topersons", ## "llegan", "sevan"), row.names = c(NA, -15L), class = "data.frame") ## ## ## resumenlargo <- melt(resumen[,c("tonombre","llegan","sevan")]) ## ## oo <- order(resumen$llegan) ## nombreordenados <- (resumen$tonombre)[oo] ## nombreordenados ## ## resumenlargo$tonombre <- factor( resumenlargo$tonombre, levels=nombreordenados, ordered=TRUE) ## ## ## set.seed(130613) ## kk <- ggplot() + ## geom_bar( aes(y= value, x=tonombre,fill=variable ), data=resumenlargo[resumenlargo$variable=="llegan", ], stat="identity") + ## geom_bar(aes(y= (-1)* value, x=tonombre,fill=variable ), data=resumenlargo[resumenlargo$variable=="sevan", ], stat="identity") + ## scale_y_continuous(breaks=seq(-1.2,1.5,0.3),labels=abs(seq(-1.2,1.5,0.3))) + ## ylab("Movilidad de los asalariados (% sobre asalariados residentes)") + ## coord_flip() + ## theme_xkcd() + xlab("") + theme(axis.ticks.y = element_blank(), axis.text.y = element_blank()) ## ## ## ## kk2 <- kk + ## geom_text(aes(x=(tonombre),y=0,label=tonombre), data=resumenlargo,family="xkcd") ## ## ## lleganespana <- sum(resumen$topersons)*100/ sum(resumen$persons) ## sevanespana <- sum(resumen$frompersons)*100/ sum(resumen$persons) ## ## ## lineaespana1 <- xkcdline(mapping=aes(xbegin=1-0.5,ybegin=lleganespana,xend=15+0.5, yend=lleganespana, yjitteramount=0.051), data= resumenlargo, linetype=2,mask=FALSE) ## lineaespana2 <- xkcdline(mapping=aes(xbegin=1-0.5,ybegin=-lleganespana,xend=15+0.5, yend=-lleganespana), yjitteramount=0.051, data= resumenlargo,linetype=2,mask=FALSE) ## ## ## kk3 <- kk2 + xkcdline(mapping=aes(xbegin=as.numeric(tonombre)-0.5,ybegin=-1.24,xend=as.numeric(tonombre)-0.5, yend=1.52, xjitteramount=0.151), data= resumenlargo, size=3,color="white") + lineaespana1 + lineaespana2 ## ## ## kk4 <- kk3 + annotate("text",x=1, y=c(lleganespana,-lleganespana),label="Media de España", hjust=c(-0.11,-0.11), vjust=c(-0.1,0.1),family="xkcd",angle=90) ## ## ## kk5 <- kk4 + scale_fill_discrete(name="", ## breaks=c("llegan", "sevan"), ## labels=c("Llegan", "Se van")) + theme(legend.justification=c(0,0), legend.position=c(0,0)) ## ## ## ## ## xrange <- c(1,15) ## yrange <- c(-1.3,1.6) ## ratioxy <- diff(xrange)/diff(yrange) ## x <- 7 ## y <- 1.5 ## scale <- 0.35 ## mapman <- aes(x, y, ## scale, ## ratioxy, ## angleofspine , ## anglerighthumerus, ## anglelefthumerus, ## anglerightradius, ## angleleftradius, ## anglerightleg, ## angleleftleg, ## angleofneck) ## n <- 1 ## set.seed(130613) ## datamanflip <- data.frame( x= x, ## y= y, ## scale = scale , ## ratioxy = ratioxy, ## angleofspine = runif(n, -pi/2 -pi/2 - pi/10,-pi/2 -pi/2 + pi/10), ## ##angleofspine = runif(n, -0 - pi/10,-0 + pi/10), ## anglerighthumerus = runif(n, -pi/2-pi/6-pi/10, -pi/2 -pi/6+pi/10), ## anglelefthumerus = runif(n, -pi/2-pi/2 - pi/10, -pi/2 -pi/2 + pi/10), ## anglerightradius = runif(n, -pi/2-pi/5 - pi/10, -pi/2-pi/5 + pi/10), ## angleleftradius = runif(n, -pi/2-pi/5 - pi/10, -pi/2-pi/5 + pi/10), ## angleleftleg = runif(n, -pi/2 + 3*pi/2 + pi / 12 -pi/20,-pi/2 +3*pi/2 + pi / 12 +pi/20) , ## anglerightleg = runif(n, -pi/2 + 3*pi/2 - pi / 12 -pi/20, -pi/2+ 3*pi/2 - pi / 12 +pi/20) , ## angleofneck = runif(n, -pi/2+3*pi/2-pi/10, -pi/2+3*pi/2+pi/10)) ## p1 <- xkcdman(mapman , datamanflip) ## ## kk6 <- kk5 + p1 ## ## ## kk7 <- kk6 + annotate("text", x=9.3, y = 1.3, label="Unos vienen, otros se van",family="xkcd" ) + ## xkcdline(aes(xbegin=xbegin,xend=xend,yend=yend,ybegin=ybegin), yjitteramount=0.135,data=data.frame(xbegin=9.0, xend=7.2, ybegin=1.2, yend=1.3)) ## ## ## ggsave(kk7,filename="grsevan.png") ## ################################################### ### code chunk number 22: motherday (eval = FALSE) ################################################### ## mommy <- read.table(sep=" ",text =" ## 8 100 ## 9 0 ## 10 0 ## 11 0 ## 12 0 ## 13 0 ## 14 100 ## 15 100 ## 16 500 ## 17 420 ## 18 75 ## 19 50 ## 20 100 ## 21 40 ## 22 0 ## ") ## names(mommy) <- c("hour","number") ## data <- mommy ## data$xmin <- data$hour - 0.25 ## data$xmax <- data$xmin + 1 ## data$ymin <- 0 ## data$ymax <- data$number ## xrange <- range(8, 24) ## yrange <- range(min(data$ymin) + 10 , max(data$ymax) + 200) ## ratioxy <- diff(xrange)/diff(yrange) ## timelabel <- function(text,x,y) { ## te1 <- annotate("text", x=x, y = y + 65, label=text, size = 6,family ="xkcd") ## list(te1, ## xkcdline(aes(xbegin=xbegin, ybegin= ybegin, xend=xend,yend=yend), ## data.frame(xbegin=x,ybegin= y + 50, xend=x,yend=y), xjitteramount = 0.5)) ## } ## n <- 1800 ## set.seed(123) ## x <- runif(n, xrange[1],xrange[2] ) ## y <- runif(n, yrange[1],yrange[2] ) ## inside <- unlist(lapply(1:n, function(i) any(data$xmin <= x[i] & x[i] < data$xmax & ## data$ymin <= y[i] & y[i] < data$ymax))) ## x <- x[inside] ## y <- y[inside] ## nman <- length(x) ## sizer <- round(runif(nman, 1, 10),0) ## angler <- runif(nman, -10,10) ## ## p <- ggplot() + ## geom_text(aes(x,y,label="Mummy",angle=angler,hjust=0, vjust=0), ## family="xkcd",size=sizer,alpha=0.3) + ## xkcdaxis(xrange,yrange) + ## annotate("text", x=16, y = 650, ## label="Happy Mother's day", size = 16,family ="xkcd") + ## xlab("daily schedule") + ## ylab("Number of times mothers are called on by their children") + ## timelabel("Wake up", 9, 125) + timelabel("School", 12.5, 90) + ## timelabel("Lunch", 15, 130) + ## timelabel("Homework", 18, 525) + ## timelabel("Bath", 21, 110) + ## timelabel("zzz", 23.5, 60) ## ## ## p ## ggsave("grmotherday.png",p) ################################################### ### code chunk number 23: PDF (eval = FALSE) ################################################### ## require(tools) ## texi2dvi("xkcd-intro.tex", pdf = TRUE)