【问题标题】:Change the color of point on click and keep it unchanged using R Shiny更改点击时点的颜色并使用 R Shiny 保持不变
【发布时间】:2019-06-25 08:35:48
【问题描述】:

我正在尝试使用 plotly 创建图表。当用户使用 R shiny 点击绘图中的任何 geom_point 时,它应该改变颜色并保持不变。

目前,我的代码运行良好。当用户单击图中的任何 geom_point 时,它正在改变颜色。但是,当我单击另一个 geom_point 时,突出显示的前一个点会恢复其原始颜色。

    library(shiny)
    library(plotly)
    library(htmlwidgets)

    ui <- fluidPage(
      plotlyOutput("plot")
    )


    javascript <- "
    function(el, x){
      el.on('plotly_click', function(data) {
        colors = [];

        var base_color = document.getElementsByClassName('legendpoints')[data.points[0].curveNumber].getElementsByTagName('path')[0].style['stroke']
        for (var i = 0; i < data.points[0].data.x.length; i += 1) {
          colors.push(base_color)
        };
        colors[data.points[0].pointNumber] = '#FF00FF';
        Plotly.restyle(el,
                       {'marker':{color: colors}},
                       [data.points[0].curveNumber]
                      );
      });
    }"


    server <- function(input, output, session) {

      nms <- row.names(mtcars)

      output$plot <- renderPlotly({
        p <- ggplot(mtcars, aes(x = mpg, y = wt, col = as.factor(cyl), key = nms)) + 
          geom_point()
        ggplotly(p) %>% onRender(javascript)

      })
    }

    shinyApp(ui, server)

我希望当用户单击任何 geom_point 时,它应该会改变颜色,并且该颜色应该保持不变,直到他关闭闪亮的应用程序。颜色不应恢复到原来的颜色。也许对 Javascript 函数有一个小的改动。谢谢!

【问题讨论】:

  • 每个子类都有一个保持颜色的点
  • @AlexanderLeow 对不起,我是闪亮和 R 的新手。我不理解你。你能详细说明一下吗?谢谢!

标签: javascript r shiny r-plotly ggplotly


【解决方案1】:

问题是您总是将所有点设置为基色,而不是检查实际点具有哪些颜色。我不是 javascript 专家,但这对我有用:

library(shiny)
library(plotly)
library(htmlwidgets)

ui <- fluidPage(
  plotlyOutput("plot")
)


javascript <- "
function(el, x){
  el.on('plotly_click', function(data) {
    var colors = [];
    // check if color is a string or array
    if(typeof data.points[0].data.marker.color == 'string'){
      for (var i = 0; i < data.points[0].data.marker.color.length; i++) {
        colors.push(data.points[0].data.marker.color);
      }
    } else {
      colors = data.points[0].data.marker.color;
    }
    // some debugging
    //console.log(data.points[0].data.marker.color)
    //console.log(colors)

    // set color of selected point
    colors[data.points[0].pointNumber] = '#FF00FF';
    Plotly.restyle(el,
      {'marker':{color: colors}},
      [data.points[0].curveNumber]
    );
  });
}
"

server <- function(input, output, session) {

  nms <- row.names(mtcars)

  output$plot <- renderPlotly({
    p <- ggplot(mtcars, aes(x = mpg, y = wt, col = as.factor(cyl), key = nms)) + 
      geom_point()
    ggplotly(p) %>% onRender(javascript)

  })
}

shinyApp(ui, server)

【讨论】:

    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2011-09-25
    • 2021-10-08
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多