Plotly - position positions using subplot

I am trying to plot multiple subheadings with shapes on each plot. From the following code below, if I display one graph, I get the following graph: Fix display of one plot

When I put 4 copies of this graph in the subheading, I get this: Incorrect display of 4 subheadings.  All shapes are drawn in one place

As you can see, all 4 lines to be drawn, one at each subheading, have been selected at their original position in the top left subheading. Any ideas how I can fix this?

** EDIT - using "paper"

If I use "doc" for xref and yref in my edge-shape declarations, the shapes don't scale properly. Maybe I am using "paper" in the wrong context here? I added the image below the result of using xyref =

library(plotly)
library(igraph)

tree <- make_tree(127,2)
tree_layout <- layout_as_tree(tree)
tree_layout_df <- as.data.frame(tree_layout)
Xn <- tree_layout_df[,1]
Yn <- tree_layout_df[,2]

edge_shapes  = list(
    type="line",
    line=list(color="#030303",width=5),
    opacity=0.3,
    x0 = 0, x1=0,
    x1 = 5,y1 = 5
)

reg_tree_plot <- plot_ly() %>%
    add_trace(x=~Xn[0:63], y=~Yn[0:63], type='scatter', width=700, height=500)

tree_layout <- layout(reg_tree_plot, shapes=edge_shapes)
x <- tree_layout
y <- tree_layout
z <- tree_layout

sub <- subplot(tree_layout,y,z,x,
              nrows=2,
              margin=0.05,
              shareX=FALSE,
              shareY=FALSE)
      

Run codeHide result


+3


source to share


2 answers


I think this is a pretty subplot

blatant bug in plotly that can be compensated for, but it's ugly and needs maintenance. You can see this if you post it to a graphics site and look at the data in the layout. Note that the corresponding coordinate systems are as follows:

  • "x1", "y1" - 1st graph - upper left
  • "x2", "y2" - second graph - top right
  • "x3", "y3" - third chart - lower left
  • "x4", "y4" - 4th graph - left as an exercise for the reader

There are several questions here:

  • Shapes are added to the layout without correct coordinate references.
  • The y coordinate systems for the 2nd and 4th graphs are slightly different from those indicated in the 1st and 3rd graphs, and may be related to the following problem.
  • xaxis for the 1st and 3rd plots is not drawing, probably the coordinate systems are not set correctly either, but these structures seemed to be confused so I didn't look closely at it.
  • I think there was a typo in your code, you specified twice x0

    when creating edge_shape

    .

Anyway, here is some code that does what you want (but with an axis error).

library(plotly)
library(igraph)

tree <- make_tree(127,2)
tree_layout <- layout_as_tree(tree)
tree_layout_df <- as.data.frame(tree_layout)
Xn <- tree_layout_df[,1]
Yn <- tree_layout_df[,2]

get_edgeshape <- function(xref,yref,xfak=1,yfak=1){
  edge_shapes  = list(
    type="rect",
    line=list(color="#030303",width=5),
    opacity=0.3,
    x0 = 0*xfak, x1 = 5*xfak,
    y0 = 0*yfak, y1 = 5*yfak,
    xref=xref,
    yref=yref
  )
}
reg_tree_plot <- plot_ly() %>%
  add_trace(x=~Xn[0:63], y=~Yn[0:63], type='scatter', width=700, height=500)

ycor1 <- 2
ycor2 <- 2*1.125
tree_layout <- layout(reg_tree_plot, shapes=get_edgeshape("x1","y1",yfak=ycor1))
x <-           layout(reg_tree_plot, shapes=get_edgeshape("x2","y2",yfak=ycor2))
y <-           layout(reg_tree_plot, shapes=get_edgeshape("x3","y3",yfak=ycor1))
z <-           layout(reg_tree_plot, shapes=get_edgeshape("x4","y4",yfak=ycor2))

sub <- subplot(tree_layout,y,z,x,
               nrows=2,
               margin=0.05,
               shareX=F,
               shareY=F)
sub

      



And here's the result:

enter image description here

Please note that this is not a great solution, if you change something in the layout you will need to adjust the parameters. Only an intricate fix will really eliminate the pain. So I submitted it as a question on the github site.

I am using the latest plot from github (4.7.0) installed with devtools::install_github("ropensci/plotly")

and here is mine sessionInfo()

:

R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

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

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

other attached packages:
[1] igraph_1.0.1  plotly_4.7.0  ggplot2_2.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.10      magrittr_1.5      devtools_1.12.0   munsell_0.4.3     xtable_1.8-2      viridisLite_0.2.0 colorspace_1.3-2 
 [8] R6_2.2.0          rlang_0.1.1       httr_1.2.1        plyr_1.8.4        dplyr_0.5.0       tools_3.4.0       grid_3.4.0       
[15] gtable_0.2.0      DBI_0.6-1         git2r_0.18.0      withr_1.0.2       crosstalk_1.0.0   htmltools_0.3.6   yaml_2.1.14      
[22] lazyeval_0.2.0    digest_0.6.12     assertthat_0.2.0  tibble_1.3.1      shiny_1.0.3       tidyr_0.6.3       purrr_0.2.2.2    
[29] htmlwidgets_0.8   curl_2.5          mime_0.5          memoise_1.1.0     compiler_3.4.0    scales_0.4.1      jsonlite_1.4     
[36] httpuv_1.3.3     

      

+2


source


At least for the time being, shapes and annotations are re-scaled / redefined in subplot()

if you are using paper coordinates, e.g .:

rect <- list(
  type = "rect",
  xref = "paper", yref = "paper",
  x0 = 0.5, x1 = 0.6, 
  y0 = 0.5, y1 = 0.6
)
p1 <- layout(plot_ly(), shapes = rect)
subplot(p1, p1)

      



Do not forget to track the progress of unofficial coordinates here - https://github.com/ropensci/plotly/issues/1019

+2


source







All Articles