2017-10-13 4 views
0

Ich versuche, ein gestapeltes Flächendiagramm in R mit dem Plotly-Paket als Teil einer Shiny-App zu erstellen und möchte die Daten bei Hover vergleichen. Allerdings verberge ich die Modusleiste aus Designgründen, daher muss ich diese Option in meinem Code angeben, da der Hover nur für den nächsten Datenpunkt zum Cursor angezeigt wird.R: Setzen Sie Plotly hovermode auf "compare data on hover"

Die gibt jedoch nur die Optionen "x" (Tooltip auf der x-Achse), "y" (Tooltip auf der y-Achse), "am nächsten" (zeigt den Tooltip für den nächsten Datenpunkt zum Cursor)) und FALSE (deaktiviert den Tooltip).

Gibt es eine Möglichkeit zu tun, was ich möchte? Beachten Sie, dass diese Frage ziemlich genau das Gegenteil von this one ist.

Der Code Ich verwende ist:

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) 

, wo eine (vereinfachte Version) Daten2 ist:

Year A  B 
2006 18.0 82.0 
2007 19.2 78.3 
2008 17.9 80.2 
2009 20.1 77.7 

Antwort

2

layout(hovermode = 'compare'), um Ihren Code hinzufügen:

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') 

EDIT @OctavianCorlade schickte mir ein IM Wichtiger Hinweis zu der obigen Lösung: "Die zuvor angegebene Antwort funktioniert, weil eine beliebige Zeichenfolge, die von den verfügbaren Optionen abweicht, dasselbe Ergebnis liefern würde. . hovermode = 'x' ist die dokumentierte Art und Weise, es zu tun, genau das gleiche Ergebnis zu erzielen
daher nach dem Vorschlag von @OctavianCorlade kann man verwenden:

layout(hovermode = 'x') 

enter image description here

+0

Ich frage mich, warum sie don‘ t dies im Referenzhandbuch enthalten? –