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

Fit multiple euler plots at the same time and maintain proportionality #46

Open
cpsievert opened this issue Mar 27, 2019 · 5 comments
Open

Comments

@cpsievert
Copy link

cpsievert commented Mar 27, 2019

This SO response suggests that the following should work to generate multiple euler plots in shared axes.

# devtools::install_github("jolars/eulerr")

library(eulerr)
library(latticeExtra)

p1 <- plot(euler(c(A = 1, B = 8, "A&B" = 1)))
p2 <- plot(euler(c(A = 1, C = 1, "A&C" = 1)))

c(p1, p2, x.same = TRUE, y.same = TRUE)

However, this is the result:

$name
[1] "euler.diagram"

$gp
NULL

$vp
viewport[euler.vp] 

$children
(gTree[canvas.grob]) 

$childrenOrder
   euler_grob 
"canvas.grob" 

$name
[1] "euler.diagram"

$gp
NULL

$vp
viewport[euler.vp] 

$children
(gTree[canvas.grob]) 

$childrenOrder
   euler_grob 
"canvas.grob" 

$x.same
[1] TRUE

$y.same
[1] TRUE
> session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value                       
 version  R version 3.5.3 (2019-03-11)
 os       macOS Mojave 10.14.3        
 system   x86_64, darwin15.6.0        
 ui       X11                         
 language (EN)                        
 collate  en_US.UTF-8                 
 ctype    en_US.UTF-8                 
 tz       America/Chicago             
 date     2019-03-27Packages ───────────────────────────────────────────────────────────────────
 package      * version    date       lib source                               
 assertthat     0.2.1      2019-03-21 [1] CRAN (R 3.5.2)                       
 backports      1.1.3      2018-12-14 [1] CRAN (R 3.5.0)                       
 callr          3.2.0      2019-03-15 [1] CRAN (R 3.5.2)                       
 cli            1.1.0      2019-03-19 [1] CRAN (R 3.5.2)                       
 colorout       1.2-0      2018-09-20 [1] Github (jalvesaq/colorout@cc5fbfa)   
 crayon         1.3.4      2017-09-16 [1] CRAN (R 3.5.0)                       
 desc           1.2.0      2019-03-04 [1] Github (r-lib/desc@ef9e3a4)          
 devtools     * 2.0.1      2018-10-26 [1] CRAN (R 3.5.1)                       
 digest         0.6.18     2018-10-10 [1] CRAN (R 3.5.1)                       
 eulerr       * 5.1.0.9000 2019-03-27 [1] Github (jolars/eulerr@0e14b54)       
 fortunes       1.5-4      2016-12-29 [1] CRAN (R 3.5.0)                       
 fs             1.2.6      2018-08-23 [1] CRAN (R 3.5.0)                       
 glue           1.3.1      2019-03-12 [1] CRAN (R 3.5.2)                       
 htmltools      0.3.6.9003 2019-03-11 [1] local                                
 htmlwidgets    1.3        2019-03-13 [1] Github (ramnathv/htmlwidgets@c998fae)
 lattice      * 0.20-38    2018-11-04 [1] CRAN (R 3.5.3)                       
 latticeExtra * 0.6-28     2016-02-09 [1] CRAN (R 3.5.0)                       
 magrittr       1.5        2014-11-22 [1] CRAN (R 3.5.0)                       
 memoise        1.1.0.9000 2019-02-01 [1] Github (hadley/memoise@1650ad7)      
 pkgbuild       1.0.3      2019-03-20 [1] CRAN (R 3.5.2)                       
 pkgload        1.0.2      2018-10-29 [1] CRAN (R 3.5.1)                       
 polyclip       1.10-0     2019-03-14 [1] CRAN (R 3.5.2)                       
 polylabelr     0.1.0      2018-11-02 [1] CRAN (R 3.5.0)                       
 prettyunits    1.0.2      2015-07-13 [1] CRAN (R 3.5.0)                       
 processx       3.3.0      2019-03-10 [1] CRAN (R 3.5.2)                       
 ps             1.3.0      2018-12-21 [1] CRAN (R 3.5.1)                       
 R6             2.4.0      2019-02-14 [1] CRAN (R 3.5.2)                       
 RColorBrewer * 1.1-2      2014-12-07 [1] CRAN (R 3.5.0)                       
 Rcpp           1.0.1      2019-03-17 [1] CRAN (R 3.5.2)                       
 remotes        2.0.2      2018-10-30 [1] CRAN (R 3.5.1)                       
 rlang          0.3.2      2019-03-21 [1] CRAN (R 3.5.2)                       
 rprojroot      1.3-2      2018-01-03 [1] CRAN (R 3.5.0)                       
 sessioninfo    1.1.1      2018-11-05 [1] CRAN (R 3.5.0)                       
 testthat       2.0.1      2018-10-13 [1] CRAN (R 3.5.0)                       
 usethis      * 1.4.0.9000 2018-10-05 [1] Github (r-lib/usethis@1e3c6a6)       
 withr          2.1.2      2018-03-15 [1] CRAN (R 3.5.0)                       

[1] /Library/Frameworks/R.framework/Versions/3.5/Resources/library
@jolars
Copy link
Owner

jolars commented Mar 28, 2019

Thanks for noticing this! I have edited my answer there so that it should work properly now. Since the package no longer uses lattice, the c.trellis() method won't work any more and you have to use gridExtra instead (or grid itself). Here is a working example:

library(eulerr)

p1 <- plot(euler(c(A = 1, B = 8, "A&B" = 1)))
p2 <- plot(euler(c(A = 1, C = 1, "A&C" = 1)))

gridExtra::grid.arrange(p1, p2)

image

@jolars jolars closed this as completed Mar 28, 2019
@cpsievert
Copy link
Author

Is there anyway to combine them such that the area of A stays constant across the plots?

@jolars
Copy link
Owner

jolars commented Mar 28, 2019

No good way at the moment I'm afraid. But it shouldn't be hard to implement, as the following silly hack proves:

m <- matrix(c(T, F, F, 
            rep(c(F, T, F), 8),
            c(T, T, F),
            c(T, F, T),
            c(T, F, F),
            c(F, F, T)), nrow = 3)

d <- as.data.frame(t(m))
colnames(d) <- LETTERS[1:3]
d$f <- c(rep("X", 10), rep("Y", 3))

g <- eulerr::euler(d, by = f)
plot(g)

image

@jolars jolars changed the title Multiple euler plots Fit multiple euler plots at the same time and maintain proportionality Mar 28, 2019
@jolars jolars reopened this Mar 28, 2019
@jolars jolars self-assigned this Mar 28, 2019
@jolars jolars removed their assignment Mar 28, 2019
@hummuscience
Copy link

Is it possible to control the positions of the multiple plots? As in, if I have 4 plots to have the ability to have a 2x2 grid instead of a 1x4 (how it is currently handled).

@jolars
Copy link
Owner

jolars commented Feb 8, 2021

@Cumol, unfortunately not at the moment. But I agree that this would be a useful option.

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

No branches or pull requests

3 participants