wachtermh · GitHub

Consider the following example:

library(tinyplot)
data("airquality")
airquality$Year <- 1973
airquality$DateChr <- paste0(airquality$Year, "-", airquality$Month)
airquality$Date <- as.Date(paste0(airquality$DateChr, "-01"), format = "%Y-%m-%d")

Doing

plt(Temp ~ DateChr, data = airquality, type = "jitter")

works:
Image
However doing

plt(Temp ~ Date, data = airquality, type = "jitter")

does not work and gives Error in jitter(x, factor = factor, amount = amount) : 'x' must be numeric.

Maybe something like this could work:

data_jitter = function(factor, amount) {
  fun = function(datapoints, ...) {
    x = datapoints$x
    y = datapoints$y
    if (is.factor(x)) {
      xlvls = levels(x)
      xlabs = seq_along(xlvls)
      names(xlabs) = xlvls
      x = as.integer(x)
    } else if (inherits(x, c("Date", "POSIXt"))) {
      xfactor = factor(x, unique(x))
      xlvls = levels(xfactor)
      xlabs = seq_along(xlvls)
      names(xlabs) = xlvls
      x = as.integer(xfactor)
    } else {
      xlabs = NULL
    }
    if (is.factor(y)) {
      ylvls = levels(y)
      ylabs = seq_along(ylvls)
      names(ylabs) = ylvls
      y = as.integer(y)
    } else {
      ylabs = NULL
    }
    x = jitter(x, factor = factor, amount = amount)
    y = jitter(y, factor = factor, amount = amount)
    datapoints$x = x
    datapoints$y = y
    out = list(
      datapoints = datapoints,
      x = x,
      y = y,
      xlabs = xlabs,
      ylabs = ylabs
    )
    return(out)
  }
}
plt(Temp ~ Date, data = airquality, type = type_jitter())

Image

Read the original on github.com ↗