Приведенный ниже сценарий работает с данными о пациентах из пакета bupaR и создает график sankey, отображающий взаимосвязь между ресурсом из столбца «сотрудник» и деятельностью, в которой он участвует, из столбца «обработка» в данных о пациентах. Помимо графика есть таблица данных, доступная в DT, которая дает подробную информацию о каждом пути графика Санки при нажатии. Мне нужна такая функциональность, чтобы, когда я нажимаю на любой путь, скажем, на путь, соединяющий сотрудника «r1» и операцию «Регистрация», я хочу, чтобы все строки из данных пациентов с обоими этими полями были доступны на графике, кроме того, аналогично для всех других путей , это должно быть динамическим, так как я буду применять эту функциональность к большим наборам данных. Прикрепляю снимок для ознакомления. Спасибо и, пожалуйста, помогите.
## app.R ##
library(shiny)
library(shinydashboard)
library(devtools)
library(ggplot2)
library(plotly)
library(proto)
library(RColorBrewer)
library(gapminder)
library(stringr)
library(broom)
library(mnormt)
library(DT)
library(bupaR)
ui <- dashboardPage(
dashboardHeader(title = "Sankey Chart"),
dashboardSidebar(
width = 0
),
dashboardBody(
box(title = "Sankey Chart", status = "primary",height = "455" ,solidHeader = T,
plotlyOutput("sankey_plot")),
box( title = "Case Summary", status = "primary", height = "455",solidHeader = T,
dataTableOutput("sankey_table"))
)
)
server <- function(input, output)
{
output$sankey_plot <- renderPlotly({
sankeyData <- patients %>%
group_by(employee,handling) %>%
count()
sankeyNodes <- list(label = c(sankeyData$employee,sankeyData$handling))
trace2 <- list(
domain = list(
x = c(0, 1),
y = c(0, 1)
),
link = list(
label = paste0("Case",1:nrow(sankeyData)),
source = sapply(sankeyData$employee,function(e) {which(e ==
sankeyNodes$label) }, USE.NAMES = FALSE) - 1,
target = sapply(sankeyData$handling,function(e) {which(e ==
sankeyNodes$label) }, USE.NAMES = FALSE) - 1,
value = sankeyData$n
),
node = list(label = sankeyNodes$label),
type = "sankey"
)
data2 <- list(trace2)
p <- plot_ly()
p <- add_trace(p, domain=trace2$domain, link=trace2$link,
node=trace2$node, type=trace2$type)
p
})
output$sankey_table <- renderDataTable({
d <- event_data("plotly_click")
d
})
}
shinyApp(ui, server)