Dónde están las letras

Inspirado en esto construí

usando como texto el Quijote y como código una versión mucho más simple y limpia que (aunque inspirado en) la del enlace original:

library(stringr)
library(plyr)
library(ggplot2)

raw <- readLines("http://www.gutenberg.org/cache/epub/2000/pg2000.txt")

# limpieza de encabezamientos
textfile <- raw[-(1:36)]
textfile <- text[1:which(text == "Fin")]

# en una única cadena
textfile <- paste(textfile, collapse= " ")

# limpieza
textfile <- str_to_lower(textfile)
textfile <- str_replace_all(textfile, "[[:punct:]]|[[:digit:]]", " ")

# selección de palabras
words <- unique(unlist(str_split(textfile, " ")))
words <- words[words != ""]

# recolección de estadísticas
res <- ldply(words, function(word){
  tmp <- str_split(word, "")[[1]]
  data.frame(word = word,
             letra = tmp,
             posicion = 1:length(tmp) / length(tmp),
             stringsAsFactors = FALSE)
})

tmp <- table(res$letra)
tmp <- names(tmp[tmp > 10])
res <- res[res$letra %in% tmp,]

ggplot(res, aes(x = posicion)) + 
  geom_density(fill = "red") + 
  facet_wrap( ~ letra, scales = "free_y") +
  ggtitle("Dónde aparece cada letra dentro de un texto (El Quijote)") +
  ylab("proporción de aparicion") + xlab("% de la longitud de la palabra") +
  scale_fill_brewer(palette = "Set1") + theme_minimal() +
  theme(axis.ticks = element_blank(), 
        axis.text.y = element_blank(), 
        axis.text.x = element_blank(),
        legend.position = "none", 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank())