R Shiny: Cómo abrir una ventana emergente y mostrar un gráfico que depende del evento de clic en una fila de la tabla DT En R Shiny, es posible abrir una ventana emergente y mostrar un gráfico que depende del evento de clic en una fila de la tabla DT. Aquí te mostraremos cómo hacerlo: 1. En primer lugar, asegúrate de tener instalada la biblioteca ‘shiny’ en tu entorno R. 2. Crea la interfaz de usuario (UI) de Shiny en tu archivo R. Puedes hacerlo usando la función `shinyUI` y definiendo la estructura de tu aplicación. 3. Dentro de la función `shinyUI`, agrega una función `dataTableOutput` para mostrar la tabla DT en tu interfaz de usuario. Por ejemplo: “`R shinyUI( fluidPage( dataTableOutput(“myTable”) ) ) “` 4. Luego, en tu archivo R, crea la función de servidor (server) de Shiny usando la función `shinyServer`. Aquí es donde manejarás el evento de clic en una fila y mostrarás la ventana emergente con el gráfico correspondiente. 5. Dentro de la función `shinyServer`, define una estructura lógica para el evento de clic en una fila de la tabla DT. Por ejemplo: “`R shinyServer(function(input, output, session) { output$myTable <- renderDataTable({ DT::datatable(my_data, rownames = FALSE, options = list( rowCallback = JS( "function(row, data) {", "$(row).on('click', function() {", "var rowData = table.row(row).data();", "showGraph(rowData);", // Llama a la función showGraph con los datos de la fila "});", "}") )) }) }) ``` 6. Dentro de la función `showGraph`, podrás definir cómo se abrirá una ventana emergente y qué gráfico se mostrará. Aquí tienes un ejemplo básico utilizando la biblioteca 'plotly' para crear un gráfico de dispersión: ```R showGraph <- function(rowData) { popupContent <- fluidPage( tags$div(plotlyOutput("myPlot")) ) modalDialog(popupContent) output$myPlot <- renderPlotly({ plot_ly(data = rowData, x = ~x_variable, y = ~y_variable, mode = 'markers') }) showModal(modalDialog()) } ``` Con estas instrucciones, podrás abrir una ventana emergente y mostrar un gráfico que dependerá del evento de clic en una fila de la tabla DT en tu aplicación R Shiny. ¡Espero que esto te sea de ayuda!
Estoy tratando de crear una ventana emergente en función de un evento de clic en Shiny. La ventana debería abrirse cuando el usuario hace clic en una fila en una tabla DT. Debería contener un gráfico de plotly, filtrado por el elemento de fila en la columna “v1” en “df” (cuando se hace clic en una fila con “v1 == “B””, todas las filas con “v1 == “B”” se incluyen en el gráfico). Puedo crear todos los objetos (ver código), pero tengo dificultades con el filtro dependiente y la apertura de la ventana emergente basada en el evento de clic en la fila.
Soy nuevo en Shiny y he intentado implementar fragmentos de preguntas similares, pero no pude encontrar exactamente lo que necesito ni juntar todo.
library(shiny)
library(DT)
library(plotly)
library(dplyr)
id <- c(1:100)
v1 <- rep(LETTERS[1:10], times = 10)
v2 <- sample.int(100, 100)
v3 <- sample.int(200, 100)
v4 <- sample.int(300, 100)
v5 <- rep(c(2000:2019), times = 5)
df <- data.frame(id, v1, v2, v3, v4, v5)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
menuItem("first", tabName = "first"
)
)
),
dashboardBody(
tabItems(
tabItem(
tabName = "first",
box(width = 12, solidHeader = TRUE,
DT::dataTableOutput("table"),
plotlyOutput("plot")
)
)
)
)
)
server <- function(input, output) {
output$table <- DT::renderDataTable({
DT::datatable(df,
options = list(
pageLength = 10, paging = TRUE, searching = TRUE
),
rownames = FALSE, selection = "single",
)
})
# table_subset <- reactive({
# df %>% filter(v1 == "B")
# })
click_subset <- df %>% filter(v1 == "B")
#Plot in popup window
output$plot <- renderPlotly({
plot_ly(click_subset, type = 'bar') %>%
add_trace(
x =~v5, y =~v3
)
})
}
shinyApp(ui, server)
davy.ai
Para crear una ventana emergente en Shiny que se abra cuando el usuario hace clic en una fila de una tabla DT, puedes usar el siguiente código:
“`{r}
library(shiny)
library(DT)
library(plotly)
library(dplyr)
id <- c(1:100)
v1 <- rep(LETTERS[1:10], times = 10)
v2 <- sample.int(100, 100)
v3 <- sample.int(200, 100)
v4 <- sample.int(300, 100)
v5 <- rep(c(2000:2019), times = 5)
df <- data.frame(id, v1, v2, v3, v4, v5)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
menuItem(“first”, tabName = “first”
)
)
),
dashboardBody(
tabItems(
tabItem(
tabName = “first”,
box(width = 12, solidHeader = TRUE,
DT::dataTableOutput(“table”)
)
),
# Ventana emergente
tags$div(
id = “modal”,
class = “modal”,
tags$div(
id = “modal-content”,
class = “modal-content”,
tags$span(id = “close”, class = “close”, “x”),
plotOutput(“popup_plot”)
)
)
)
)
)
server <- function(input, output) {
output$table <- DT::renderDataTable({
DT::datatable(df,
options = list(
pageLength = 10, paging = TRUE, searching = TRUE
),
rownames = FALSE, selection = “single”,
)
})
# Obtener datos para el gráfico emergente basado en la fila clicada
output$popup_plot <- renderPlot({ req(input$clicked_row) row_data <- df[input$clicked_row,] filtered_data <- df %>% filter(v1 == row_data$v1)
plot(filtered_data$v5, filtered_data$v3, type = “bar”)
})
# Abrir ventana emergente al hacer clic en la fila
observeEvent(input$table_rows_selected, {
output$popup_plot <- renderPlot({ clicked_row <- input$table_rows_selected req(clicked_row) row_data <- df[clicked_row,] filtered_data <- df %>% filter(v1 == row_data$v1)
plot(filtered_data$v5, filtered_data$v3, type = “bar”)
})
showModal(“modal”)
})
# Cerrar ventana emergente al hacer clic en el botón de cierre
observeEvent(input$close, {
removeModal()
})
}
shinyApp(ui, server)