2017-11-16 2 views
0

Wenn es sich um ein grafisches Diagramm handelt, ist es einfach, Informationen anzuzeigen, wenn Sie den Mauszeiger über einen bestimmten Punkt bewegen. Dieser Code die Arbeit machen:ggplotly und geom_area: Anzeige von Informationen beim Schweben über einen Bereich (kein Punkt)

toy_df=data.frame("t"=c(seq(1,10),seq(1,10)), 
        "value"=c(runif(10,0,10),2*runif(10,0,10)), 
        "event"=c(rep("A",10),rep("B",10))) 

p <- ggplot() + geom_area(aes(y = value, x = t, fill=event), data = toy_df) 
ggplotly(p) 

Aber ich möchte Informationen angezeigt werden, wenn sie über einen der Gegend schwebt. Denn in meinem Fall ist der Bereich ein Ereignis, das ich tief beschreiben möchte.

Antwort

1

Polygone in ggplot2 (geom_polygon) bieten eine mögliche Lösungen.
Im folgenden finden Sie eine ziemlich rohe Code finden, der die Hauptidee klären sollte:

library(ggplot2) 
library(plotly) 
set.seed(1) 
toy_df=data.frame("t"=c(seq(1,10),seq(1,10)), 
        "value"=c(runif(10,0,10),2*runif(10,0,10)), 
        "event"=c(rep("A",10),rep("B",10))) 

# In order to create polygons like in geom_areas, 
# two points on the x-axis must be added: one at t=1 and one at t=10 
toy_df2 <- toy_df[NULL,] 
for (k in unique(toy_df$event)) { 
subdf <- subset(toy_df, toy_df$event==k) 
nr <- nrow(subdf) 
row1 <- subdf[1,] 
row1$value <- 0 
row2 <- subdf[nr,] 
row2$value <- 0 
toy_df2 <- rbind(toy_df2, row1, subdf, row2) 
} 
# Stack polygons 
toy_df2$value[toy_df2$event=="A"] <- toy_df2$value[toy_df2$event=="A"] + 
            toy_df2$value[toy_df2$event=="B"] 

# Calculate mean values for the two events: they will be displayed in the tooltip 
toy_df2 <- toy_df2 %>% group_by(event) %>% mutate(mn=round(mean(value),3)) 

p <- ggplot(data = toy_df2, aes(y = value, x = t, fill=event, 
      text=paste0("Value:", mn,"<br>Event:", event))) + 
    geom_polygon() 
ggplotly(p, tooltip="text") 

enter image description here

+0

Wow vielen Dank Marco! Sehr interessant –

Verwandte Themen