我认为不存在这样的函数,但我们可以编写一个快速而肮脏的位置函数,以适当的方式转换数据。下面的例子:
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 创建
注意:除此示例外未进行测试