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!