是否有用于对变量内的点进行排序的几何对象?

ljw*_*ers 1 r ggplot2

我想知道是否有某种几何或函数可以制作点/抖动图,其中点根据其值进行排序。请参阅下面的示例:

在此输入图像描述

teu*_*and 5

我认为不存在这样的函数,但我们可以编写一个快速而肮脏的位置函数,以适当的方式转换数据。下面的例子:

library(tidyverse)

df <- data.frame(
  var = LETTERS[sample(1:2, 100, TRUE)],
  val = rnorm(100)
)

position_orderdodge <- function(
  width = NULL
) {
  ggproto(NULL, PositionOrderdodge, width = width)
}

PositionOrderdodge <- ggproto(
  "PositionOrderdodge", PositionDodge,
  compute_panel = function(data, params, scales) {
    data <- flip_data(data, params$flipped_aes)
    w <- params$width
    data <- data %>% group_by(x, group) %>%
      mutate(rank = scales::rescale(rank(y), to = c(-w, w)))
    data <- as.data.frame(data)
    data$x <- data$x + data$rank
    data$rank <- NULL
    flip_data(data, params$flipped_aes)
  }
)

ggplot(df, aes(var, val)) +
  geom_point(position = position_orderdodge(0.2))
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-12-07 创建

注意:除此示例外未进行测试