Skip to content

type = "jitter" does not work with date on x-axis #327

@wachtermh

Description

@wachtermh

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions