The help file for geom_rangeframe indicates that if na.rm = FALSE then NAs will be removed with a warning, and if na.rm = TRUE then NAs will be removed silently.
However, it seems that when NAs are present, there is no warning and the range lines are not drawn at all.
I think it is because x and y are specified as optional_aes in GeomRangeFrame, but the default Geom$handle_na only checks the required_aes and non_missing_aes.
I have a fix that I could submit as a pull request if this can be replicated.
Example below adapted from geom_point ...
library("dplyr")
library("ggplot2")
library("ggthemes")
library("magrittr")
set.seed(1)
mtcars2 <- mtcars %>%
mutate(mpg = ifelse(runif(32) < 0.2, NA, mpg))
# generates a warning from geom_point
# but not from geom_rangeframe
# and range line for mpg not drawn
mtcars2 %>%
ggplot(aes(wt, mpg)) +
geom_point() +
coord_cartesian(clip = "off") +
geom_rangeframe()
# suppresses the warning from geom_point
# range line for mpg still not drawn
mtcars2 %>%
ggplot(aes(wt, mpg)) +
geom_point(na.rm = TRUE) +
coord_cartesian(clip = "off") +
geom_rangeframe(na.rm = TRUE)
# explicitly removing all NAs "works"
# both range lines are drawn
mtcars2 %>%
filter(complete.cases(.)) %>%
ggplot(aes(wt, mpg)) +
geom_point() +
coord_cartesian(clip = "off") +
geom_rangeframe()
My sessionInfo() ...
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.utf8 LC_CTYPE=English_United Kingdom.utf8 LC_MONETARY=English_United Kingdom.utf8
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.utf8
time zone: Europe/London
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] magrittr_2.0.3 ggthemes_5.1.0 ggplot2_3.5.1 dplyr_1.1.4
loaded via a namespace (and not attached):
[1] vctrs_0.6.5 cli_3.6.2 rlang_1.1.3 stringi_1.8.4 purrr_1.0.2 generics_0.1.3 glue_1.7.0
[8] labeling_0.4.3 colorspace_2.1-0 scales_1.3.0 fansi_1.0.6 grid_4.3.0 munsell_0.5.1 tibble_3.2.1
[15] lifecycle_1.0.4 stringr_1.5.1 compiler_4.3.0 pkgconfig_2.0.3 rstudioapi_0.16.0 farver_2.1.1 R6_2.5.1
[22] tidyselect_1.2.1 utf8_1.2.4 pillar_1.9.0 tools_4.3.0 withr_3.0.0 gtable_0.3.5
The help file for
geom_rangeframe
indicates that ifna.rm = FALSE
then NAs will be removed with a warning, and ifna.rm = TRUE
then NAs will be removed silently.However, it seems that when NAs are present, there is no warning and the range lines are not drawn at all.
I think it is because
x
andy
are specified asoptional_aes
inGeomRangeFrame
, but the defaultGeom$handle_na
only checks therequired_aes
andnon_missing_aes
.I have a fix that I could submit as a pull request if this can be replicated.
Example below adapted from
geom_point
...My
sessionInfo()
...