2017-02-01 12 views
0

我目前正在用ggplot創建交互式圖並積極地在我正在處理的一個閃亮的應用程序中。 我想知道是否有辦法創建一個ggplotly圖形,當鼠標懸停在它上面時會突出顯示一條線。懸停突出顯示一條線使用ggplotly

set.seed(1) 
D = data.table(id = rep((1:100),10), value = rnorm(1000), stratification = rep(c("A","B","C","D"), 25)) 
setkey(D, id) 
D = D[, time := 1:10, by = id] 

plot = ggplot(data = D, aes(x = time, y = value, group = id, color = stratification))+ 
    geom_line()+ 
    theme_classic() + 
    xlab("Time from index (years)") + 
    ylab("value") 

ggplotly(plot) 

在這個圖表中有一種方法,當鼠標懸停在上面時突出顯示/加粗對應的id的一行。這是一個陰謀的選擇嗎?如果是這樣,有沒有辦法用ggplotly來實現這一點?

謝謝。

回答

0

您可以用閃亮event_data,但它重繪服務器上的情節,因此是相當慢的,所以我通過刪除一些數據簡化的例子:

library(data.table) 
library(plotly) 
library(shiny) 
set.seed(1) 
D = data.table(id = rep((1:10),10), value = round(rnorm(100),3), stratification = rep(c("A","B","C","D"), 25)) 
setkey(D, id) 
D = D[, time := 1:10, by = id] 

shinyApp(ui=fluidPage(plotlyOutput("myplot")), server=function(input, output, session){ 
output$myplot = renderPlotly({ 
    p <- ggplot()+ 
    theme_classic() + 
    xlab("Time from index (years)") + 
    ylab("value") 
    hover_line <- event_data("plotly_hover") 
    if(!is.null(hover_line)){ 
    selected <- D[time==hover_line[[3]] & value==hover_line[[4]],.(id,stratification)] 
    print(selected) 
    p <- p+ geom_line(data = D[id %in% selected$id & stratification %in% selected$stratification,],aes(x = time, y = value, group = id, color = stratification), size=2) 
    p <- p+ geom_line(data = D[!(id %in% selected$id & stratification %in% selected$stratification),],aes(x = time, y = value, group = id, color = stratification)) 
    } else 
    p <- p+ geom_line(data = D,aes(x = time, y = value, group = id, color = stratification)) 

    ggplotly(p) 
    }) 
}) 
相關問題