闪亮的两个情节和串扰问题
Shiny with two plotly plots and crosstalk issue
我想在两个图中显示数据 (plotly
) 并希望能够通过使用串扰在另一个图中显示一个图中的 selected 点。可悲的是,我尝试过的都没有用。在服务器功能之外定义共享数据的解决方案不是一个选项,因为我的应用程序中的数据来自其他反应和输入。下面是一个代表。
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("rows", label = "# Rows", min = 50, max = 150, value = 100),
plotlyOutput("scatter1"),
plotlyOutput("scatter2")
)
server <- function(input, output, session) {
iris_new <- reactive({
iris[1:as.numeric(input$rows),]
})
sd <- SharedData$new(iris_new)
output$scatter1 <- renderPlotly({
plot_ly(
sd,
x = ~Sepal.Length,
y = ~Sepal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
)
})
output$scatter2 <- renderPlotly({
plot_ly(
sd,
x = ~Petal.Length,
y = ~Petal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
)
})
}
shinyApp(ui, server)
我还尝试将 SharedData$new(iris_new)
变成反应式表达式,例如
iris_new <- reactive({
SharedData$new(iris[1:as.numeric(input$rows),])
})
并在 plot_ly(...)
中使用 iris_new()
,但效果不佳。我也试过 sd$data(withSelection = T)
但没有成功。奇怪的是,当我 select 一个点时,它起作用了(尽管我不能再 deselect 了)。但是当我尝试 select 多个点(我真正想要的)时,另一个情节没有反应。
我需要它来处理 plotly(而不是 d3scatter、scatterD3 等)!
试试这个
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("rows", label = "# Rows", min = 50, max = 150, value = 100),
plotlyOutput("scatter1"),
plotlyOutput("scatter2")
)
server <- function(input, output, session) {
iris_new <- reactive({
highlight_key(iris[1:as.numeric(input$rows),])
})
output$scatter1 <- renderPlotly({
plot_ly(
iris_new(),
x = ~Sepal.Length,
y = ~Sepal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
) %>%
highlight("plotly_selected")
})
output$scatter2 <- renderPlotly({
plot_ly(
iris_new(),
x = ~Petal.Length,
y = ~Petal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
) %>%
highlight("plotly_selected")
})
}
shinyApp(ui, server)
将鼠标悬停在select一个区域,双击图解select。
我想在两个图中显示数据 (plotly
) 并希望能够通过使用串扰在另一个图中显示一个图中的 selected 点。可悲的是,我尝试过的都没有用。在服务器功能之外定义共享数据的解决方案不是一个选项,因为我的应用程序中的数据来自其他反应和输入。下面是一个代表。
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("rows", label = "# Rows", min = 50, max = 150, value = 100),
plotlyOutput("scatter1"),
plotlyOutput("scatter2")
)
server <- function(input, output, session) {
iris_new <- reactive({
iris[1:as.numeric(input$rows),]
})
sd <- SharedData$new(iris_new)
output$scatter1 <- renderPlotly({
plot_ly(
sd,
x = ~Sepal.Length,
y = ~Sepal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
)
})
output$scatter2 <- renderPlotly({
plot_ly(
sd,
x = ~Petal.Length,
y = ~Petal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
)
})
}
shinyApp(ui, server)
我还尝试将 SharedData$new(iris_new)
变成反应式表达式,例如
iris_new <- reactive({
SharedData$new(iris[1:as.numeric(input$rows),])
})
并在 plot_ly(...)
中使用 iris_new()
,但效果不佳。我也试过 sd$data(withSelection = T)
但没有成功。奇怪的是,当我 select 一个点时,它起作用了(尽管我不能再 deselect 了)。但是当我尝试 select 多个点(我真正想要的)时,另一个情节没有反应。
我需要它来处理 plotly(而不是 d3scatter、scatterD3 等)!
试试这个
library(shiny)
library(plotly)
ui <- fluidPage(
sliderInput("rows", label = "# Rows", min = 50, max = 150, value = 100),
plotlyOutput("scatter1"),
plotlyOutput("scatter2")
)
server <- function(input, output, session) {
iris_new <- reactive({
highlight_key(iris[1:as.numeric(input$rows),])
})
output$scatter1 <- renderPlotly({
plot_ly(
iris_new(),
x = ~Sepal.Length,
y = ~Sepal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
) %>%
highlight("plotly_selected")
})
output$scatter2 <- renderPlotly({
plot_ly(
iris_new(),
x = ~Petal.Length,
y = ~Petal.Width,
color = ~Species,
type = "scatter",
mode = "markers"
) %>%
highlight("plotly_selected")
})
}
shinyApp(ui, server)
将鼠标悬停在select一个区域,双击图解select。