【问题标题】:Plotly R : How to update style of lines without redrawing (local)Plotly R:如何在不重绘的情况下更新线条样式(本地)
【发布时间】:2016-04-07 15:44:46
【问题描述】:

我正在尝试在一个闪亮的应用程序中本地绘制数十条线。线条画好后,我希望不用重画就能改变它们的样式?

在下面的示例中,为简单起见,只有 6 条迹线(行)。我只想改变第一行和第三行的不透明度,而不重绘任何东西:

library(plotly)
plot_ly(mtcars, x=mpg, y=wt, group=carb)
style(p = last_plot(), opacity=0.1) #Only modifies first line & complains : You've referenced non-existent traces
style(p = last_plot(), opacity=0.1, traces = 3) #Does not work at all
Warning: You've referenced non-existent traces
Error in p$data[[max(traces)]] : subscript out of bounds

style() 怎么用?

我搜索了很多,但找不到任何文档

感谢您的帮助

问候

【问题讨论】:

    标签: r shiny plotly


    【解决方案1】:

    我认为style() 旨在使用类似的东西:

    p <- plot_ly(x = seq(0, 8), y = rnorm(8), name = "Blue Trace") %>%
           add_trace(y = rnorm(8), name = "Orange Trace") %>% 
           add_trace(y = rnorm(8), name = "Green Trace")
    p
    pp <- style(p = last_plot(), opacity=0.1, traces = 1)
    pp
    ppp <- style(pp = last_plot(), opacity=0.1, traces = 2)
    ppp
    pppp <- style(ppp = last_plot(), opacity=0.1, traces = 3)
    pppp 
    

    【讨论】:

    • 谢谢。显然,您的示例产生 3 条轨迹,而我上面的示例没有。就我而言,我必须使用 data.frame 一次画很多线。如果我用 add_trace() 添加它们,它会非常慢。因此,我仍在寻找可以与上面的初始示例一起使用的解决方案。有趣的是 style() 没有记录。
    【解决方案2】:

    也许这有帮助?您应该能够快速跳转到任何跟踪并修改/添加任何属性。

    library(plotly)
    p <- plot_ly(mtcars, x=mpg, y=wt, group=carb)
    p <- plotly_build(p)
    p$data[[1]]$opacity = 0.1
    p$data[[3]]$opacity = 0.1
    
    p
    

    【讨论】:

    • 看起来不错。在内部,这会重新绘制整个事物还是仅仅修改现有的痕迹?因为这是一个轻量级的例子,所以很难说。
    • 它修改现有跟踪的数据/属性。但要让图表在屏幕上真正更新,您必须再次绘制它。您从 plotly build 获得的对象本质上是一个在内部传递给 plotly.js 的列表。因此,您必须刷新实际绘图才能看到更改。至少我是这么理解的。
    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2011-07-07
    • 2015-10-27
    • 2018-11-08
    • 2012-01-11
    • 2011-01-19
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多