每次用户在onRender htmlwidgets中交互时删除旧跟踪并添加新跟踪

每次用户在onRender htmlwidgets中交互时删除旧跟踪并添加新跟踪,r,plotly,htmlwidgets,onrender,R,Plotly,Htmlwidgets,Onrender,我的目标是使用R包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

我的目标是使用R包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)
library(plotly)
图书馆(扫帚)
库(htmlwidgets)

dat要删除的跟踪对象存储在
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)

非常感谢。我永远不会看x物体。我担心我的知识不足,甚至无法查看,这可能会导致我在使用onRender()时遇到问题。你能解释一下你是如何知道跟踪被添加到x对象的吗?我使用的是ChromeDeveloperTools(CDT),我通常只是事先键入console.log(Object),以便在CDT中查看对象。除了在许多对象上运行console.log()之外,您还可以使用其他方法来更好地了解跟踪的工作方式吗?