Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Continuous fill does not obey fine-grained show.legend settings #3461

Closed
mjskay opened this issue Jul 28, 2019 · 2 comments · Fixed by #3490
Closed

Continuous fill does not obey fine-grained show.legend settings #3461

mjskay opened this issue Jul 28, 2019 · 2 comments · Fixed by #3490

Comments

@mjskay
Copy link
Contributor

mjskay commented Jul 28, 2019

If you use fine-grained settings with show.legend, the legend for a continuous fill variable is not drawn. E.g. this:

library(ggplot2)
library(dplyr)

tribble(
  ~x1, ~y1, ~x2, ~y2, ~id, ~id_int,
    1,   1,   2,   2, "A",       1,
    2,   2,   3,   3, "B",       2
) %>%
  ggplot(aes(xmin = x1, ymin = y1, xmax = x2, ymax = y2, fill = id_int)) +
  # could also do show.legend = c(size = FALSE) here and get the same
  # result; in both cases I would have expected the fill legend to show up
  geom_rect(show.legend = c(size = FALSE, fill = TRUE))

Created on 2019-07-28 by the reprex package (v0.3.0)

I chose size here as an unrelated variable, it could be anything. This problem also happens on geoms other than rect, so I don't think it's a problem there.

I would expect output that looks like this:

image

FWIW, with a discrete variable for the fill, it does work as expected:

library(ggplot2)
library(dplyr)

tribble(
  ~x1, ~y1, ~x2, ~y2, ~id, ~id_int,
    1,   1,   2,   2, "A",       1,
    2,   2,   3,   3, "B",       2
) %>%
  ggplot(aes(xmin = x1, ymin = y1, xmax = x2, ymax = y2, fill = id)) +
  # could also do show.legend = c(size = FALSE) here and get the correct result
  geom_rect(show.legend = c(size = FALSE, fill = TRUE))

Created on 2019-07-28 by the reprex package (v0.3.0)

I tested on the github version of ggplot2 as of today (2019-07-28). Session info:

R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] reprex_0.3.0          gganimate_1.0.3       RColorBrewer_1.1-2    cowplot_1.0.0         forcats_0.4.0        
 [6] modelr_0.1.4          brms_2.9.0            Rcpp_1.0.2            broom_0.5.2           emmeans_1.3.5.1      
[11] tidybayes_1.1.0       rstan_2.19.2          StanHeaders_2.18.1-10 ggstance_0.3.2        ggplot2_3.2.0.9000   
[16] dplyr_0.8.3           magrittr_1.5         

loaded via a namespace (and not attached):
  [1] ggnewscale_0.3.0          TH.data_1.0-10            colorspace_1.4-1          ggridges_0.5.1           
  [5] rsconnect_0.8.15          rprojroot_1.3-2           estimability_1.3          markdown_1.0             
  [9] base64enc_0.1-3           fs_1.3.1                  rstudioapi_0.10           farver_1.1.0             
 [13] remotes_2.1.0             svUnit_0.7-12             DT_0.7                    mvtnorm_1.0-11           
 [17] dotwhisker_0.5.0          bridgesampling_0.7-2      codetools_0.2-16          splines_3.6.0            
 [21] knitr_1.23                shinythemes_1.1.2         zeallot_0.1.0             pkgload_1.0.2            
 [25] bayesplot_1.7.0           packrat_0.5.0             shiny_1.3.2               clipr_0.7.0              
 [29] compiler_3.6.0            backports_1.1.4           assertthat_0.2.1          Matrix_1.2-17            
 [33] lazyeval_0.2.2            cli_1.1.0                 tweenr_1.0.1              later_0.8.0              
 [37] htmltools_0.3.6           prettyunits_1.0.2         tools_3.6.0               igraph_1.2.4.1           
 [41] coda_0.19-3               gtable_0.3.0              glue_1.3.1                reshape2_1.4.3           
 [45] vctrs_0.2.0               nlme_3.1-140              crosstalk_1.0.0           xfun_0.8                 
 [49] stringr_1.4.0             ps_1.3.0                  mime_0.7                  miniUI_0.1.1.1           
 [53] gtools_3.8.1              devtools_2.1.0            MASS_7.3-51.4             zoo_1.8-6                
 [57] scales_1.0.0              colourpicker_1.0          hms_0.5.0                 promises_1.0.1           
 [61] Brobdingnag_1.2-6         parallel_3.6.0            sandwich_2.5-1            inline_0.3.15            
 [65] shinystan_2.5.0           curl_4.0                  memoise_1.1.0             gridExtra_2.3            
 [69] loo_2.1.0                 stringi_1.4.3             dygraphs_1.1.1.6          desc_1.2.0               
 [73] pkgbuild_1.0.3            rlang_0.4.0               pkgconfig_2.0.2           matrixStats_0.54.0       
 [77] evaluate_0.14             lattice_0.20-38           purrr_0.3.2               labeling_0.3             
 [81] rstantools_1.5.1          htmlwidgets_1.3           processx_3.4.1            tidyselect_0.2.5         
 [85] plyr_1.8.4                R6_2.4.0                  generics_0.0.2            multcomp_1.4-10          
 [89] whisker_0.3-2             pillar_1.4.2              withr_2.1.2               xts_0.11-2               
 [93] survival_2.44-1.1         abind_1.4-5               tibble_2.1.3              crayon_1.3.4             
 [97] arrayhelpers_1.0-20160527 rmarkdown_1.14            progress_1.2.2            usethis_1.5.1            
[101] grid_3.6.0                callr_3.3.1               threejs_0.3.1             digest_0.6.20            
[105] xtable_1.8-4              tidyr_0.8.3               httpuv_1.5.1              stats4_3.6.0             
[109] munsell_0.5.0             sessioninfo_1.1.1         shinyjs_1.0
@yutannihilation
Copy link
Member

Thanks, confirmed. Probably we should check any(layer$show.legend[matched]) instead of isTRUE(layer$show.legend) around here:

ggplot2/R/guide-colorbar.r

Lines 242 to 248 in 141c775

guide_geom.colorbar <- function(guide, layers, default_mapping) {
# Layers that use this guide
guide_layers <- lapply(layers, function(layer) {
matched <- matched_aes(layer, guide, default_mapping)
if (length(matched) > 0 && (isTRUE(is.na(layer$show.legend)) || isTRUE(layer$show.legend))) {
layer

(I was afraid it was me that broke this by #3163, but this doesn't seem to work even before that...)

@lock
Copy link

lock bot commented Feb 22, 2020

This old issue has been automatically locked. If you believe you have found a related problem, please file a new issue (with reprex) and link to this issue. https://reprex.tidyverse.org/

@lock lock bot locked and limited conversation to collaborators Feb 22, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants