¿Cómo podemos hacer gráficos de estilo xkcd?
Aparentemente, la gente ha descubierto cómo hacer gráficos de estilo xkcd en Mathematica y LaTeX . ¿Podemos hacerlo en R? ¿Ggplot2-ers? ¿Un geom_xkcd y/o theme_xkcd?
Supongo que en los gráficos base, ¿par(xkcd=TRUE)? ¿Cómo lo hago?
Como primer intento (y como se muestra de manera mucho más elegante a continuación) en ggplot2, agregar el argumento jitter a una línea crea una excelente apariencia de dibujado a mano. Entonces -
ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) +
geom_line(position="jitter", color="red", size=2) + theme_bw()
Es un buen ejemplo, pero los ejes y las fuentes parecen más complicados. Sin embargo, las fuentes parecen resueltas (abajo). ¿La única forma de manejar las hachas es borrarlas y dibujarlas a mano? ¿Existe una solución más elegante? En particular, en ggplot2, ¿se puede modificar element_line en el nuevo sistema de temas para que adopte un argumento similar a jitter?
Es posible que desee considerar el siguiente paquete:
Paquete xkcd : Trazado de gráficos ggplot2 en un estilo XKCD.
library(xkcd)
vignette("xkcd-intro")
Algunos ejemplos (diagramas de dispersión, gráficos de barras):
- Gráfico de dispersión:
- Gráfico de barras:
Pensando en la misma línea que algunas de las otras respuestas, "eliminé el ggplot" del gráfico y también agregué la flexibilidad de las ubicaciones de las etiquetas del eje x (que parece ser común en xkcd) y una etiqueta arbitraria en el cuadro.
Tenga en cuenta que tuve algunos problemas al cargar la fuente Humor Sans y la descargué manualmente al directorio de trabajo.
Y el código...
library(ggplot2)
library(extrafont)
### Already have read in fonts (see previous answer on how to do this)
loadfonts()
### Set up the trial dataset
data <- NULL
data$x <- seq(1, 10, 0.1)
data$y1 <- sin(data$x)
data$y2 <- cos(data$x)
data$xaxis <- -1.5
data <- as.data.frame(data)
### 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="Humor Sans")
)
### Plot the chart
p <- ggplot(data=data, aes(x=x, y=y1))+
geom_line(aes(y=y2), position="jitter")+
geom_line(colour="white", size=3, position="jitter")+
geom_line(colour="red", size=1, position="jitter")+
geom_text(family="Humor Sans", x=6, y=-1.2, label="A SIN AND COS CURVE")+
geom_line(aes(y=xaxis), position = position_jitter(h = 0.005), colour="black")+
scale_x_continuous(breaks=c(2, 5, 6, 9),
labels = c("YARD", "STEPS", "DOOR", "INSIDE"))+labs(x="", y="")+
theme_xkcd
ggsave("xkcd_ggplot.jpg", plot=p, width=8, height=5)