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")
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())

