ggplotly 和 geom_area :将鼠标悬停在一个区域(不是一个点)上时显示信息
ggplotly and geom_area : display informations when hovering over an area (not a point)
对于ggplotly图表,将鼠标悬停在特定点上时可以很容易地显示信息。这段代码可以完成工作:
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)
但是我想将鼠标悬停在其中一个区域上时显示信息。因为在我的例子中,区域是我希望能够深入描述的事件。
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")
对于ggplotly图表,将鼠标悬停在特定点上时可以很容易地显示信息。这段代码可以完成工作:
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)
但是我想将鼠标悬停在其中一个区域上时显示信息。因为在我的例子中,区域是我希望能够深入描述的事件。
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")