在闪亮的单选按钮 select 上有计划地重置 event_data
Resetting plotly event_data upon radio button select in shiny
我有一个闪亮的交互式显示文本,它从绘图中捕获点击事件。如果什么都没有点击,则显示默认文本,一旦点击一个点,就会显示其对应的值。
但是,我还有一个单选按钮 select 图中显示的内容。问题是,当我更改 selected 单选按钮时,交互式显示的文本不再正确,因为情节发生了变化并且没有被捕获,正如您在下面的简化示例中看到的那样。
因此,每当我 select 单选按钮中的不同选项时,我希望重置 event_data(并因此显示默认文本)。
我知道有一些方法可以创建一个单独的 'reset' 按钮(例如使用 shinyjs
包,请参阅 here),但我想知道是否有可能以某种方式耦合此重置单选按钮的功能。
library(ggplot2)
library(shiny)
library(shinydashboard)
library(plotly)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotlyOutput("first"),
radioButtons("radbut", "Choose:", c("Sepal" = "sepal","Petal" =
"petal"))
),
box(textOutput("second"))
)
)
)
server <- function(input, output, session) {
output$first <- renderPlotly({
if (input$radbut == "sepal") {
gp <- ggplot(data = iris, aes(x = Sepal.Width, y = Sepal.Length)) +
geom_point()
} else {
gp <- ggplot(data = iris, aes(x = Petal.Width, y = Petal.Length)) +
geom_point()
}
ggplotly(gp, source = "select")
})
output$second <- renderText({
clicked <- event_data("plotly_click", source = "select")
if (is.null(clicked)) {
text = "Select a value"
} else {
text = paste("You clicked:", input$radbut,
clicked[[3]],",", clicked[[4]], sep = " ")
}
text
})
}
shinyApp(ui, server)
这是一个使用反应值的可能解决方案(解决方法)。我认为我必须有一个更优雅的解决方案,但找不到它。
希望对您有所帮助!
library(ggplot2)
library(shiny)
library(shinydashboard)
library(plotly)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotlyOutput("first"),
radioButtons("radbut", "Choose:", c("Sepal" = "sepal","Petal" =
"petal"))
),
box(textOutput("second"))
)
)
)
server <- function(input, output, session) {
defaults <- reactiveValues(part = "Sepal", text = "")
output$first <- renderPlotly({
defaults$text = "Select a value"
if (input$radbut == "sepal") {
defaults$part = "Sepal"
gp <- ggplot(data = iris, aes(x = Sepal.Width, y = Sepal.Length)) +
geom_point()
} else {
defaults$part = "Petal"
gp <- ggplot(data = iris, aes(x = Petal.Width, y = Petal.Length)) +
geom_point()
}
ggplotly(gp, source = "select")
})
clicked <- reactive({
event_data("plotly_click", source = "select")
})
observeEvent(clicked(), {
defaults$text = paste("You clicked:", defaults$part,
clicked()[[3]],",", clicked()[[4]], sep = " ")
})
output$second <- renderText({
defaults$text
})
}
shinyApp(ui, server)
我有一个闪亮的交互式显示文本,它从绘图中捕获点击事件。如果什么都没有点击,则显示默认文本,一旦点击一个点,就会显示其对应的值。
但是,我还有一个单选按钮 select 图中显示的内容。问题是,当我更改 selected 单选按钮时,交互式显示的文本不再正确,因为情节发生了变化并且没有被捕获,正如您在下面的简化示例中看到的那样。 因此,每当我 select 单选按钮中的不同选项时,我希望重置 event_data(并因此显示默认文本)。
我知道有一些方法可以创建一个单独的 'reset' 按钮(例如使用 shinyjs
包,请参阅 here),但我想知道是否有可能以某种方式耦合此重置单选按钮的功能。
library(ggplot2)
library(shiny)
library(shinydashboard)
library(plotly)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotlyOutput("first"),
radioButtons("radbut", "Choose:", c("Sepal" = "sepal","Petal" =
"petal"))
),
box(textOutput("second"))
)
)
)
server <- function(input, output, session) {
output$first <- renderPlotly({
if (input$radbut == "sepal") {
gp <- ggplot(data = iris, aes(x = Sepal.Width, y = Sepal.Length)) +
geom_point()
} else {
gp <- ggplot(data = iris, aes(x = Petal.Width, y = Petal.Length)) +
geom_point()
}
ggplotly(gp, source = "select")
})
output$second <- renderText({
clicked <- event_data("plotly_click", source = "select")
if (is.null(clicked)) {
text = "Select a value"
} else {
text = paste("You clicked:", input$radbut,
clicked[[3]],",", clicked[[4]], sep = " ")
}
text
})
}
shinyApp(ui, server)
这是一个使用反应值的可能解决方案(解决方法)。我认为我必须有一个更优雅的解决方案,但找不到它。
希望对您有所帮助!
library(ggplot2)
library(shiny)
library(shinydashboard)
library(plotly)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotlyOutput("first"),
radioButtons("radbut", "Choose:", c("Sepal" = "sepal","Petal" =
"petal"))
),
box(textOutput("second"))
)
)
)
server <- function(input, output, session) {
defaults <- reactiveValues(part = "Sepal", text = "")
output$first <- renderPlotly({
defaults$text = "Select a value"
if (input$radbut == "sepal") {
defaults$part = "Sepal"
gp <- ggplot(data = iris, aes(x = Sepal.Width, y = Sepal.Length)) +
geom_point()
} else {
defaults$part = "Petal"
gp <- ggplot(data = iris, aes(x = Petal.Width, y = Petal.Length)) +
geom_point()
}
ggplotly(gp, source = "select")
})
clicked <- reactive({
event_data("plotly_click", source = "select")
})
observeEvent(clicked(), {
defaults$text = paste("You clicked:", defaults$part,
clicked()[[3]],",", clicked()[[4]], sep = " ")
})
output$second <- renderText({
defaults$text
})
}
shinyApp(ui, server)