在Shiny应用程序中,可以使用JavaScript和Shiny的JavaScript绑定来实现可拖动绘图中的高度值更新sliderInput的值。
以下是一种实现方法:
library(shiny)
ui <- fluidPage(
sliderInput("slider", "Slider", min = 0, max = 100, value = 50)
)
server <- function(input, output) {
# 服务器逻辑
}
shinyApp(ui, server)
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("slider", "Slider", min = 0, max = 100, value = 50),
plotlyOutput("plot")
)
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(data = iris, x = ~Sepal.Length, y = ~Sepal.Width, type = "scatter", mode = "markers")
})
}
shinyApp(ui, server)
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("slider", "Slider", min = 0, max = 100, value = 50),
plotlyOutput("plot"),
tags$script('
// 获取sliderInput的DOM元素
var slider = document.getElementById("slider");
// 获取plotly图表的DOM元素
var plot = document.getElementById("plot");
// 监听plotly图表的高度变化事件
plot.on("plotly_relayout", function(eventdata) {
// 获取新的高度值
var newHeight = eventdata["yaxis.range[1]"];
// 更新sliderInput的值
Shiny.setInputValue("slider", newHeight);
});
')
)
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(data = iris, x = ~Sepal.Length, y = ~Sepal.Width, type = "scatter", mode = "markers")
})
observeEvent(input$slider, {
# 处理sliderInput的值变化事件
# 可以在这里添加其他逻辑
# ...
})
}
shinyApp(ui, server)
在上述代码中,我们使用JavaScript的plotly_relayout
事件来监听plotly图表的高度变化。当高度变化时,我们获取新的高度值,并使用Shiny的setInputValue
函数将新的高度值更新到sliderInput中。
注意:为了使JavaScript代码生效,需要将其包含在tags$script
函数中,并将其添加到Shiny应用程序的UI部分。
这样,当用户在可拖动绘图中改变高度时,sliderInput的值将自动更新为新的高度值。您可以根据需要在服务器端的observeEvent
中处理sliderInput的值变化事件,并添加其他逻辑。
领取专属 10元无门槛券
手把手带您无忧上云