gpt4 book ai didi

r - Plotly - 使用子图塑造位置

转载 作者:行者123 更新时间:2023-12-05 00:51:35 35 4
gpt4 key购买 nike

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

当我在子图中放置这个图的 4 个副本时,我得到以下信息:
Incorrect display of 4 subplots. All shapes are drawn in same location

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

** 编辑 - 使用“纸”

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

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)

最佳答案

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

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

  • 这里有几个问题:
  • 在没有正确坐标引用的情况下将形状添加到布局中。
  • 第 2 和第 4 个图中的 y 坐标系与第 1 个和第 3 个图中的y 坐标系有些不同,并且可能与下一个问题有关。
  • 第 1 个和第 3 个图的 xaxis 没有绘制,可能坐标系也没有正确设置,但是这些结构似乎很困惑,所以我没有仔细看。
  • 我认为您的代码中存在拼写错误,您指定了 x0在您创建 edge_shape 时两次.

  • 无论如何,这里有一些代码可以满足您的需求(但带有轴错误)。
    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

    结果如下:

    enter image description here

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

    关于r - Plotly - 使用子图塑造位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44077754/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com