¿Cómo podemos hacer gráficos de estilo xkcd?

Resuelto jebyrnes asked hace 54 años • 7 respuestas

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?

xkcd#1064

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?

jebyrnes avatar Jan 01 '70 08:01 jebyrnes
Aceptado

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 dispersión

  • Gráfico de barras:

Gráfico de barras

Emilio Torres Manzanera avatar May 16 '2013 20:05 Emilio Torres Manzanera

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.

ingrese la descripción de la imagen aquí

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)
Mark Bulling avatar Oct 01 '2012 22:10 Mark Bulling