通过ggplotly使用Plotly的突出显示功能来控制图例行为

时间:2019-12-22 06:50:36

标签: r ggplot2 plotly ggplotly

我花了很多时间试图找出如何结合使用Plotly的highlight()功能和plotly::ggplotly()来自定义或控制Plotly的图例行为。这是一个示例:

library(ggplot2)
library(plotly)
library(dplyr)

test_data <- data.frame( 
  name = LETTERS[1:5], 
  metric = sample(x = c(500:800), size = 100)
  ) %>% 
  arrange(name) %>% 
  group_by(name) %>% 
  mutate(index = row_number()) %>% 
  data.frame()


plotly_obj <- ggplotly(
  test_data %>% 
    highlight_key(~name) %>% 
    ggplot() + 
    geom_line(
      aes(
        x = index, 
        y = metric, 
        color = name
        ), 
      size = .75
      ) + 
    scale_x_continuous(breaks = c(1:20)) +
    scale_color_brewer(palette = "Accent") + 
    theme_bw()
  )

highlight(
  plotly_obj, 
  on = "plotly_hover",
  off = "plotly_doubleclick",
  opacityDim = .1
  ) %>% 
  config(displayModeBar = F)

这将产生一个非常接近我要查找的图表,但是,图例通过添加在图例中突出显示的组的第二个实例来对悬停突出显示做出反应:

Chart 1

我找到了一种方法,可以通过在上面的函数(在highlight行之后)内添加selected = attrs_selected(showlegend = FALSE)来完全禁用opacityDim = .1的图例行为,从而产生以下结果:

Chart 2

是否有一种方法可以强制图例突出显示当前通过在图例内部进行悬停而选择的组/行,而不是1.)在图例中创建重复的突出显示项(如第一个图表)或2.)完全禁用第二张图表中的图例?我绝不是Plotly的专家,我感觉到我的问题可能是由于我对Plotly的串扰机制不了解而造成的,并且可能是不了解ggplotly如何将aes()特性传递给传说。但是,我对JavaScript的了解很少,我还没有找到一种方法来强制图例以这种方式运行。如果我缺少什么,请告诉我。

0 个答案:

没有答案