0

我希望使用 R 包 htmlwidgets 的 onRender() 函数制作一个绘图,用户可以在其中单击一个点并绘制一条线。我现在的关键是在它的默认厚度和可能的默认不透明度处绘制一条灰线。

然而,我一直坚持改变线条的粗细(并且可能改变线条的不透明度,尽管它可能正在工作并且我看不到它,因为线条太细了)。我希望线条非常粗且相当透明。我尝试了几种线宽和不透明度的参数和方法(其中一些在下面注释掉了),但似乎它们并没有什么区别。有什么想法我可能会错过吗?谢谢你。

library(plotly)
library(broom)

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) {
            // reduce the opacity of every trace except for the hover one
            el.on('plotly_click', function(e) {

              var trace1 = {
                 x: [100, 400],
                 y: [100, 400],
                 mode: 'lines',
                 //line: dict(color: 'gray', width: 100)
                 marker: {
                   color: 'gray',
                   size: 200,
                   width: 1000,
                   opacity: 0.5
                 }
              }
              Plotly.addTraces(el.id, trace1);
           })
          }
          ", data=dat)
4

1 回答 1

0

opacity需要在跟踪对象中。您的 line 对象存在一些语法问题,导致 Javascript 无法读取它。

在此处输入图像描述

gp %>% onRender("
function(el, x, data) {

  el.on('plotly_click', function(e) {

  var trace1 = {
    x: [100, 400],
    y: [100, 400],
    mode: 'lines',
    line: {
        color: 'gray', 
        width: 100
    },
    opacity: 0.8,
  }
  Plotly.addTraces(el.id, trace1);
})
}", data=dat)
于 2017-03-01T23:33:14.330 回答