代码之家  ›  专栏  ›  技术社区  ›  hans glick

ggplotly和geom_区域:悬停在区域(非点)上时显示信息

  •  1
  • hans glick  · 技术社区  · 7 年前

    当涉及到图形时,当鼠标悬停在特定点上时,很容易显示信息。此代码执行以下操作:

    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)
    

    但是当我在其中一个区域上悬停时,我想显示信息。因为在我的例子中,区域是一个我想能够深入描述的事件。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Marco Sandri    7 年前

    多边形 ggplot2 ( geom_polygon )提供可能的解决方案。
    在下面,您可以找到一个相当原始的代码,它应该澄清了主要思想:

    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