Skip to content

Commit

Permalink
position_stack() does not remove missing data (#5519)
Browse files Browse the repository at this point in the history
* instead of removing, `position_stack()` sets incomplete data to missing

* adjust test

* Add news bullet

* add issue nr to bullet
  • Loading branch information
teunbrand committed Dec 14, 2023
1 parent e5abb05 commit aa41dcb
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 11 deletions.
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# ggplot2 (development version)

* `position_stack()` no longer silently removes missing data, which is now
handled by the geom instead of position (#3532).

* Legend keys that can draw arrows have their size adjusted for arrows.

* The `trans` argument in scales and secondary axes has been renamed to
Expand Down
9 changes: 4 additions & 5 deletions R/position-stack.R
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,10 @@ PositionStack <- ggproto("PositionStack", Position,
ymax = as.numeric(ifelse(data$ymax == 0, data$ymin, data$ymax))
)

data <- remove_missing(
data,
vars = c("x", "xmin", "xmax", "y"),
name = "position_stack"
)
vars <- intersect(c("x", "xmin", "xmax", "y"), names(data))
missing <- detect_missing(data, vars)
data[missing, vars] <- NA

flip_data(data, params$flipped_aes)
},

Expand Down
4 changes: 2 additions & 2 deletions tests/testthat/test-geom-col.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ test_that("geom_col removes columns with parts outside the plot limits", {
ggplotGrob(p + ylim(0.5, 4)),
"Removed 3 rows containing missing values or values outside the scale range"
)
expect_warning( # warning created at build stage
ggplot_build(p + ylim(0, 2.5)),
expect_warning( # warning created at render stage
ggplotGrob(p + ylim(0, 2.5)),
"Removed 1 row containing missing values or values outside the scale range"
)
})
Expand Down
12 changes: 8 additions & 4 deletions tests/testthat/test-scales.R
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,14 @@ test_that("oob affects position values", {
}
base + scale_y_continuous(limits = c(-0,5))

expect_warning(low_censor <- cdata(base + y_scale(c(0, 5), censor)),
low_censor <- cdata(base + y_scale(c(0, 5), censor))
mid_censor <- cdata(base + y_scale(c(3, 7), censor))
handle <- GeomBar$handle_na

expect_warning(low_censor[[1]] <- handle(low_censor[[1]], list(na.rm = FALSE)),
"Removed 1 row containing missing values or values outside the scale range")
expect_warning(mid_censor <- cdata(base + y_scale(c(3, 7), censor)),
"Removed 2 rows containing missing values or values outside the scale range")
expect_warning(mid_censor[[1]] <- handle(mid_censor[[1]], list(na.rm = FALSE)),
"Removed 3 rows containing missing values or values outside the scale range")

low_squish <- cdata(base + y_scale(c(0, 5), squish))
mid_squish <- cdata(base + y_scale(c(3, 7), squish))
Expand All @@ -127,7 +131,7 @@ test_that("oob affects position values", {

# Bars depend on limits and oob
expect_equal(low_censor[[1]]$y, c(0.2, 1))
expect_equal(mid_censor[[1]]$y, c(0.5))
expect_equal(mid_censor[[1]]$y, numeric(0))
expect_equal(low_squish[[1]]$y, c(0.2, 1, 1))
expect_equal(mid_squish[[1]]$y, c(0, 0.5, 1))
})
Expand Down

0 comments on commit aa41dcb

Please sign in to comment.