R-每次用户在Onrender HTMLWidgets中进行交互时,删除旧跟踪并添加新的跟踪



我的目标是使用r package htmlwidgets中的onrender()函数制作绘图,在该函数中,用户可以单击一个点并绘制厚灰色的半透明行。我的症状如下所示。

中所示。
library(plotly)
library(broom)
library(htmlwidgets)
dat <- mtcars
dat$mpg <- dat$mpg * 10
p <- ggplot(data = dat, aes(x=disp,y=mpg)) + geom_point(size=0.5)
ggplotly(p) %>%
  onRender("
           function(el, x, data) {
              el.on('plotly_click', function(e) {
              //Plotly.deleteTraces(el.id, trace1);
              var trace1 = {
                 x: [100, 400],
                 y: [100, 400],
                 mode: 'lines',
                 line: {
                   color: 'gray',
                   width: 100
                 },
                 opacity: 0.5
              }
              //Plotly.deleteTraces(el.id, trace1);
              Plotly.addTraces(el.id, trace1);
           })
          }
          ", data = dat)

对我来说仍然存在的问题是,用户每次点击一个点时,灰线的不透明度都会变得越来越深,更暗。那不是我的意图。在我的真实应用中,灰线厚度也可以改变,具体取决于此MWE中未包含的其他参数。结果,就此MWE而言,我想确定一种方法,当用户单击某个点时,删除了旧的灰色线并绘制了新的灰色线。

经过一番研究,似乎我最好的选择是使用plotly.deletrace(el.id,trace1)函数。我试图将该命令插入两个位置(目前在上面的代码中进行了评论)。但是,在这两个位置中,该命令似乎都阻止了任何灰色线被绘制。我不确定为什么会发生这种情况以及如何解决。结果,关于为什么会发生这种情况以及如何解决的任何信息将非常有帮助!谢谢。

注意:这有点像先前的帖子的延续(在render()htmlwidgets上的散点图更改线厚度和不透明度)。

要删除的跟踪对象存储在x.data[1]中。这应该有效:

ggplotly(p) %>%
    onRender("function(el, x, data) {
                 el.on('plotly_click', function(e) {
                 if(x.data[1]) Plotly.deleteTraces(el.id, 1);
                 var trace1 = {
                     x: [100, 400],
                     y: [100, 400],
                     mode: 'lines',
                     line: {
                         color: 'gray',
                         width: 100
                     },
                     opacity: 0.5
                 }
                 Plotly.addTraces(el.id, trace1);
                 })
             }", data = dat)

相关内容

  • 没有找到相关文章

最新更新