在R中的onRender()htmlWidgets上更改散点图中的线条粗细和不透明度

时间:2017-03-01 20:12:01

标签: r ggplot2 plotly htmlwidgets

我希望使用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)

1 个答案:

答案 0 :(得分:0)

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

enter image description here

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)