How can we make xkcd style graphs?

前端 未结 7 1484
心在旅途
心在旅途 2020-11-28 00:12

Apparently, folk have figured out how to make xkcd style graphs in Mathematica and in LaTeX. Can we do it in R? Ggplot2-ers? A geom_xkcd and/or theme_xkcd?

I guess i

7条回答
  •  广开言路
    2020-11-28 00:44

    Basic line-drawing function:

    xkcd_line <- function(x, y, color) {
      len <- length(x);
      rg <- par("usr");
      yjitter <- (rg[4] - rg[3]) / 1000;
      xjitter <- (rg[2] - rg[1]) / 1000;
      x_mod <- x + rnorm(len) * xjitter;
      y_mod <- y + rnorm(len) * yjitter;
      lines(x_mod, y_mod, col='white', lwd=10);
      lines(x_mod, y_mod, col=color, lwd=5);
    }
    

    Basic axis:

    xkcd_axis <- function() {
      rg <- par("usr");
      yaxis <- 1:100 / 100 * (rg[4] - rg[3]) + rg[3];
      xaxis <- 1:100 / 100 * (rg[2] - rg[1]) + rg[1];
      xkcd_line(1:100 * 0 + rg[1] + (rg[2]-rg[1])/100, yaxis,'black')
      xkcd_line(xaxis, 1:100 * 0 + rg[3] + (rg[4]-rg[3])/100, 'black')
    }
    

    And sample code:

    data <- data.frame(x=1:100)
    data$one <- exp(-((data$x - 50)/10)^2)
    data$two <- sin(data$x/10)
    plot.new()
    plot.window(
        c(min(data$x),max(data$x)),
        c(min(c(data$one,data$two)),max(c(data$one,data$two))))
    xkcd_axis()
    xkcd_line(data$x, data$one, 'red')
    xkcd_line(data$x, data$two, 'blue')
    

    Produces:

    Example chart

提交回复
热议问题