From 6000e9cb39885cf34ea0ce7df47f08a744bb6c7a Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 3 Jun 2024 15:58:44 +0200 Subject: [PATCH 1/2] count groups per position instead of position per group --- R/position-dodge.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/position-dodge.R b/R/position-dodge.R index 17bd607324..c2d0dc1eca 100644 --- a/R/position-dodge.R +++ b/R/position-dodge.R @@ -111,9 +111,9 @@ PositionDodge <- ggproto("PositionDodge", Position, if (identical(self$preserve, "total")) { n <- NULL } else { - panels <- unname(split(data, data$PANEL)) - ns <- vapply(panels, function(panel) max(table(panel$xmin)), double(1)) - n <- max(ns) + n <- vec_unique(data[c("group", "PANEL", "xmin")]) + n <- vec_group_id(n[c("PANEL", "xmin")]) + n <- max(tabulate(n, attr(n, "n"))) } list( From d58039f6a781f348be7d569a28efe32370086d8c Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Tue, 4 Jun 2024 13:11:53 +0200 Subject: [PATCH 2/2] add news bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index de3e87cee3..5bfc66e78e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* `position_dodge(preserve = "single")` now handles multi-row geoms better, + such as `geom_violin()` (@teunbrand based on @clauswilke's work, #2801). * The `arrow.fill` parameter is now applied to more line-based functions: `geom_path()`, `geom_line()`, `geom_step()` `geom_function()`, line geometries in `geom_sf()` and `element_line()`.