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

Legend coloring issue when plotting multiple legends for different geom_point layers #32

Open
janstrauss1 opened this issue Jun 7, 2021 · 3 comments

Comments

@janstrauss1
Copy link

Hi @eliocamp,

Many thanks for your time and effort to develop ggnewscale!

Unfortunately, I'm currently having some issues with the correct coloring of my legend when plotting multiple legends for two geom_point layers using color as single aesthetic. Not sure if it's a bug or just some big oversight of myself...

Please see a reprex below to illustrate my issue.
What I'm trying to achieve are two legends with blue, orange and green points, one with filled colored points using geom_point(shape = 19...) and one with open circles using geom_point(shape = 21...) (like in the bottom plot).

Yet, somehow the coloring of my points in the legend get messed up?!

Many thanks for any feedback and help!

library(tidyverse)
library(ggnewscale)

## make example data
set.seed(123)
d <- tibble(
  feature = rep(base::factor(c("feature1","feature2")), 54),
  name = rep(base::factor(c("name1", "name2", "name3")), 36),
  x = runif(108, min = 0.1, max = 100),
  y = runif(108, min = 0.1, max = 100)
  )

## Point scatterplot with two legends
ggplot(data = d, aes(x = x, y = y)) +
  geom_point(shape = 19, data = subset(d, feature == "feature1"), aes(color = name), size = 3, show.legend = TRUE) +
  scale_color_manual(name = "feature1", values = c("blue", "orange", "green")) +
  new_scale_color() + # geoms below will use another color scale
  geom_point(shape = 21, data = subset(d, feature == "feature2"), aes(color = name), size = 3, show.legend = TRUE) +
  scale_color_manual(name = "feature2", values = c("blue", "orange", "green")) +
  geom_abline(linetype = "dashed") +
  xlim(0, 100) + ylim(0, 100) +
  theme_bw()

ggplot(data = d, aes(x = x, y = y)) +
  geom_point(shape = 19, data = subset(d, feature == "feature1"), aes(color = name), size = 3, show.legend = FALSE) +
  scale_color_manual(name = "feature1", values = c("blue", "orange", "green")) +
  new_scale_color() + # geoms below will use another color scale
  geom_point(shape = 21, data = subset(d, feature == "feature2"), aes(color = name), size = 3, show.legend = TRUE) +
  scale_color_manual(name = "feature2", values = c("blue", "orange", "green")) +
  geom_abline(linetype = "dashed") +
  xlim(0, 100) + ylim(0, 100) +
  theme_bw()

Created on 2021-06-07 by the reprex package (v2.0.0)

sessionInfo()
#> R version 4.0.5 (2021-03-31)
#> Platform: x86_64-apple-darwin17.0 (64-bit)
#> Running under: macOS Catalina 10.15.7
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
#> 
#> locale:
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> loaded via a namespace (and not attached):
#>  [1] digest_0.6.27      withr_2.4.2        lifecycle_1.0.0    magrittr_2.0.1    
#>  [5] reprex_2.0.0       evaluate_0.14      highr_0.9          stringi_1.6.2     
#>  [9] rlang_0.4.11       cli_2.5.0          rstudioapi_0.13    fs_1.5.0          
#> [13] vctrs_0.3.8        rmarkdown_2.8      tools_4.0.5        stringr_1.4.0.9000
#> [17] glue_1.4.2         xfun_0.23          yaml_2.2.1         compiler_4.0.5    
#> [21] htmltools_0.5.1.1  knitr_1.33

Created on 2021-06-07 by the reprex package (v2.0.0)

@eliocamp
Copy link
Owner

eliocamp commented Jun 7, 2021

I started removing some bits of (probably unnecesary) code and I think that if you remove the show.legend = TRUE bits you can get the result you want. I have no idea why that's necesary, though, but hopefuly this is good enough for you right now until I can publish a proper fix.

library(ggplot2)
library(ggnewscale)

set.seed(123)
d <- data.frame(
  feature = rep(base::factor(c("feature1","feature2")), 54),
  name = rep(base::factor(c("name1", "name2", "name3")), 36),
  x = runif(108, min = 0.1, max = 100),
  y = runif(108, min = 0.1, max = 100)
)



ggplot(data = d, aes(x = x, y = y)) +
  geom_point(shape = 19, data = subset(d, feature == "feature1"), aes(color = name), size = 3) +
  scale_color_manual(name = "feature1", values = c("blue", "orange", "green")) +
  new_scale_color() +
  geom_point(shape = 21, data = subset(d, feature == "feature2"), aes(color = name), size = 3) +
  scale_color_manual(name = "feature2", values = c("blue", "orange", "green")) 

Created on 2021-06-07 by the reprex package (v2.0.0)

@janstrauss1
Copy link
Author

Hi @eliocamp,

That's certainly good enough for me.

I actually used the show.legend argument initially only for testing and playing around with different ggplot() settings. Wouldn't have expected that this might affect my plotting results.

Many thanks for your help!

@eliocamp
Copy link
Owner

eliocamp commented Jun 7, 2021

Good to know.
I'll leave this issue open because I feel that this is a genuine bug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants