Okay so in this demonstration I’m standing on the shoulders of giants to generate two basics graphs that look somewhat like those of an xkcd comic. Follow the steps below to do the same. First we want load in ggplot for our pretty graph making tools:

install.packages('ggplot2', repos = 'http://cran.us.r-project.org')
library(ggplot2)
install.packages('RColorBrewer', repos = 'http://cran.us.r-project.org')
library(RColorBrewer)
We need to create our theme. There are a couple good resources that I found to describe how to do this:

To do this, we need to load in pretty fonts, hit yes at the prompts:

install.packages("extrafont",repos = 'http://cran.us.r-project.org')
library(extrafont)
## Registering fonts with R
font_import(pattern="[C/c]omic")
font_import(pattern="[A/a]rial")
loadfonts(device="pdf")

You can now look at the fonts loaded to be used with R:

fonttable()
fonts()
## [1] "Comic Sans MS"         "Arial Black"           "Arial"                
## [4] "Arial Narrow"          "Arial Rounded MT Bold" "Arial Unicode MS"

Let’s render our first plot:

library(ggplot2)
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 1973 and 1974 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text=element_text(size=16, family="Comic Sans MS"))

Now to actually create our theme:

### XKCD theme
theme_xkcd <- theme(
  panel.background = element_rect(fill="white"),
  #axis.ticks = element_line(colour=NA),
  panel.grid = element_line(colour="white"),
  #axis.text.y = element_text(colour=NA),
  axis.text.x = element_text(colour="black"),
  text = element_text(size=16, family="Comic Sans MS")
)

And let’s use it in a plot about diamonds (a girls best friend):

data(diamonds)
summary(diamonds)
##      carat               cut        color        clarity     
##  Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065  
##  1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258  
##  Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194  
##  Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171  
##  3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066  
##  Max.   :5.0100                     I: 5422   VVS1   : 3655  
##                                     J: 2808   (Other): 2531  
##      depth           table           price             x         
##  Min.   :43.00   Min.   :43.00   Min.   :  326   Min.   : 0.000  
##  1st Qu.:61.00   1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710  
##  Median :61.80   Median :57.00   Median : 2401   Median : 5.700  
##  Mean   :61.75   Mean   :57.46   Mean   : 3933   Mean   : 5.731  
##  3rd Qu.:62.50   3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540  
##  Max.   :79.00   Max.   :95.00   Max.   :18823   Max.   :10.740  
##                                                                  
##        y                z         
##  Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 4.720   1st Qu.: 2.910  
##  Median : 5.710   Median : 3.530  
##  Mean   : 5.735   Mean   : 3.539  
##  3rd Qu.: 6.540   3rd Qu.: 4.040  
##  Max.   :58.900   Max.   :31.800  
## 

Finally, let’s render the plot:

qplot(data=diamonds, x=carat, y=price,color=cut)+scale_color_brewer(palette='Accent') + theme_xkcd + ggtitle("Diamond Prices in Relation to Price, Cut, and Carat")

Andddd one last time with our first plot but with our xkcd theme:

ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 1973 and 1974 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme_xkcd

Looks pretty good!