【问题标题】:Plotly - Shape positions using subplotPlotly - 使用子图塑造位置
【发布时间】:2017-10-20 00:55:53
【问题描述】:

我正在尝试在每个图上绘制多个带有形状的子图。从下面的代码中,如果我显示一个图,我会得到以下图:

当我在子图中放置 4 个该图的副本时,我得到以下信息:

正如您所见,应该在每个子图上绘制的所有 4 条线都已绘制在左上角子图的原始位置。有什么想法可以解决这个问题吗?

** 编辑 - 使用“纸张”

如果我在边缘形状的声明中使用外部参照和 yref 的“纸张”,则形状无法正确缩放。也许我在这里错误的上下文中使用了“纸”?我在下面附上了一张图片

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)

【问题讨论】:

  • 您必须计算适当的纸张坐标。他们从左到右和从上到下走 0-1。我认为这不是一个实用的解决方案。
  • 在 github 上查看我们围绕您的问题的讨论。卡森是我相信的情节的主要作者之一。 github.com/ropensci/plotly/issues/1019 - 随意提出你自己的想法和 cmets。

标签: r shiny plotly


【解决方案1】:

我认为这很明显是 subplot in plotly 中的一个错误,可以弥补,但它很丑陋并且需要维护。如果您将其发布到 plotly 站点并查看布局中的数据,您可以看到这一点。请注意,适当的坐标系似乎是:

  • "x1","y1" - 第一个图 - 左上角
  • "x2","y2" - 第二个图 - 右上角
  • "x3","y3" - 第三个图 - 左下角
  • "x4","y4" - 第 4 个图 - 留给读者练习

这里有几个问题:

  • 在没有正确的坐标参考的情况下将形状添加到布局中。
  • 第 2 和第 4 图中的 y 坐标系与第 1 和第 3 图中的不同,可能与下一个问题有关。
  • 第一个和第三个图的 x 轴未绘制,可能坐标系也未正确设置,但这些结构似乎很混乱,所以我没有仔细查看。
  • 我认为您的代码中有错字,您在创建 edge_shape 时指定了两次 x0

无论如何,这里有一些代码可以满足您的需求(但存在轴错误)。

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

结果如下:

请注意,这不是一个很好的解决方案,如果您更改布局中的任何内容,则需要调整参数。只有巧妙地修复才能真正解决痛苦。所以我把它作为一个问题提交到 github 网站上。

我正在使用来自 github (4.7.0) 的最新 plotly,与 devtools::install_github("ropensci/plotly") 一起安装,这是我的 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】:

    至少目前,如果您使用 坐标,形状和注释仅在 subplot() 中重新缩放/重新定位,例如:

    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)
    

    请随时在此处跟踪非纸质坐标的进度 -- https://github.com/ropensci/plotly/issues/1019

    【讨论】:

    • 这可以算是权威答案了。
    • 您好,卡森,感谢您的回复。我更新了我的帖子,以说明当我将其应用于我的示例时会发生什么。
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2021-12-26
    • 2020-10-21
    • 2019-07-08
    • 2021-01-23
    • 2019-06-25
    • 2018-09-11
    • 2021-09-19
    相关资源
    最近更新 更多