R:将Plotly hovermode设置为“比较悬停时的数据”

时间:2017-10-13 12:51:30

标签: r plotly

我正在尝试使用Plotly软件包作为Shiny应用程序的一部分在R中创建堆积区域图表,并希望比较悬停时的数据。但是,由于设计原因,我隐藏了模式栏,因此我需要在我的代码中声明此选项,因为当前只显示最近数据指向光标的悬停。

但是,Plotly for R reference仅提供选项“x”(x轴上的工具提示),“y”(y轴上的工具提示),“最近”(显示最近数据点的工具提示)到光标)和FALSE(禁用工具提示)。

有没有办法做我想做的事情?请注意,这个问题与this one完全相反。

我正在使用的代码是:

<div class="hello">
  <p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque euismod elit diam, in condimentum eros scelerisque id. Cras tempus lectus tortor, ut elementum eros mollis consequat. Nullam ac odio eros. Phasellus at turpis tristique, facilisis neque
  nec, auctor turpis. Nunc ac justo gravida, lobortis lectus a, tempus felis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris vitae imperdiet sapien, eget interdum lacus.
  </p>
</div>

其中(简化版)data2是:

plot_ly(data2, 
        x = ~Year,
        y = ~B, 
        name = 'In-centre', 
        type = 'scatter', 
        mode = 'none', 
        fill = 'tozeroy', 
        fillcolor = '#F5FF8D', 
        hoverinfo = 'y') %>%
add_trace(y = ~A, 
          name = 'At home', 
          fillcolor = '#50CB86', 
          hoverinfo = 'y') %>% 
layout(xaxis = list(title = "", 
                    showgrid = FALSE, 
                    tickangle = 270, 
                    dtick = 1, 
                    tickfont = list(size = 11)),
       yaxis = list(title = "", 
                    ticklen = 8, 
                    tickcolor = "#EEEEEE", 
                    range = c(-2, 101), 
                    tick0 = 0, 
                    dtick = 10, 
                    tickfont = list(size = 11)),
       showlegend = TRUE,
       legend = list(x = 0, 
                     y = -0.2, 
                     orientation = "h", 
                     traceorder = "normal"),
        margin = list(t = 25, b = 50, r = 10, l = 40)) %>% 
config(displayModeBar = FALSE)

1 个答案:

答案 0 :(得分:11)

layout(hovermode = 'compare')添加到您的代码中:

data2 <- read.table(text="
Year   A      B
2006   18.0   82.0
2007   19.2   78.3
2008   17.9   80.2
2009   20.1   77.7
", header=T)

library(plotly)
library(dplyr)
plot_ly(data2, 
        x = ~Year,
        y = ~B, 
        name = 'In-centre', 
        type = 'scatter', 
        mode = 'none', 
        fill = 'tozeroy', 
        fillcolor = '#F5FF8D', 
        hoverinfo = 'y') %>%
add_trace(y = ~A, 
          name = 'At home', 
          fillcolor = '#50CB86', 
          hoverinfo = 'y') %>% 
layout(xaxis = list(title = "", 
                    showgrid = FALSE, 
                    tickangle = 270, 
                    dtick = 1, 
                    tickfont = list(size = 11)),
       yaxis = list(title = "", 
                    ticklen = 8, 
                    tickcolor = "#EEEEEE", 
                    range = c(-2, 101), 
                    tick0 = 0, 
                    dtick = 10, 
                    tickfont = list(size = 11)),
       showlegend = TRUE,
       legend = list(x = 0, 
                     y = -0.2, 
                     orientation = "h", 
                     traceorder = "normal"),
        margin = list(t = 25, b = 50, r = 10, l = 40)) %>% 
config(displayModeBar = FALSE) %>%
layout(hovermode = 'compare')

修改 @OctavianCorlade给我发了一个关于上面给出的解决方案的重要说明:&#34; 之前提供的答案有效,因为任何不同于可用选项的字符串都会产生相同的结果。 hovermode = 'x'是记录在案的方法,实现完全相同的结果&#34; 因此,根据@OctavianCorlade的建议,可以使用:

layout(hovermode = 'x')

enter image description here