使用 Plotly/Shiny 中的代理接口动态更改数据
Using Proxy Interface in Plotly/Shiny to dynamically change data
我想使用 Proxy Interface 更新绘图中的数据(显示在 Shiny 应用程序的 plotlyOutput 中)。这是一个最小的 App.R 代码:
library(shiny)
library(plotly)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
p <- plot_ly(type="scatter",mode="markers")
p <- layout(p,title="test")
p <- add_trace(p, x=0,y=0,name="ABC_test",mode="lines+markers")
})
observeEvent(input$update, {
proxy <- plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("restyle", list(x=0,y=1),0)
})
}
shinyApp(ui, server)
当我 运行 它时,绘图在 (0,0) 处显示有一个点(根据需要)但是当我单击按钮 "Test" 时,该点不会移动到(0,1)。我怎样才能做到这一点?
感谢您的回答。
奇怪的是addTraces
不适用于一个点,而是两个点。为了让它工作,你可以添加相同的点两次。所以你可以试试这个:
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
p <- plot_ly(type="scatter",mode="markers")
p <- layout(p,title="test")
p <- add_trace(p, x=0,y=0,name="ABC_test",mode="lines+markers")
})
observeEvent(input$update, {
plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("deleteTraces", list(as.integer(1))) %>%
plotlyProxyInvoke("addTraces", list(x=c(0, 0),y=c(1, 1),
type = 'scatter',
mode = 'markers'))
})
}
shinyApp(ui, server)
library(shiny)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
plot_ly() %>%
layout(title="test") %>%
add_trace(x=runif(2), y=runif(2), name="ABC_test", type="scatter", mode="lines+markers")
})
observeEvent(input$update, {
plotlyProxy("graphe", session, FALSE) %>%
plotlyProxyInvoke("deleteTraces", list(as.integer(0))) %>%
plotlyProxyInvoke("addTraces", list(x=runif(2),
y=runif(2),
name="ABC_test",
type = 'scatter',
mode = 'lines+markers'))
})
}
shinyApp(ui, server)
restyle
API 有点靠不住...我忘记了推理,但是像 x
和 y
这样的数据数组需要双数组。我会这样做:
library(shiny)
library(plotly)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
plot_ly() %>%
add_markers(x = 0, y = 0, name = "ABC_test") %>%
layout(title = "test")
})
observeEvent(input$update, {
plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("restyle", "y", list(list(1)), 0)
})
}
shinyApp(ui, server)
我想使用 Proxy Interface 更新绘图中的数据(显示在 Shiny 应用程序的 plotlyOutput 中)。这是一个最小的 App.R 代码:
library(shiny)
library(plotly)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
p <- plot_ly(type="scatter",mode="markers")
p <- layout(p,title="test")
p <- add_trace(p, x=0,y=0,name="ABC_test",mode="lines+markers")
})
observeEvent(input$update, {
proxy <- plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("restyle", list(x=0,y=1),0)
})
}
shinyApp(ui, server)
当我 运行 它时,绘图在 (0,0) 处显示有一个点(根据需要)但是当我单击按钮 "Test" 时,该点不会移动到(0,1)。我怎样才能做到这一点?
感谢您的回答。
奇怪的是addTraces
不适用于一个点,而是两个点。为了让它工作,你可以添加相同的点两次。所以你可以试试这个:
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
p <- plot_ly(type="scatter",mode="markers")
p <- layout(p,title="test")
p <- add_trace(p, x=0,y=0,name="ABC_test",mode="lines+markers")
})
observeEvent(input$update, {
plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("deleteTraces", list(as.integer(1))) %>%
plotlyProxyInvoke("addTraces", list(x=c(0, 0),y=c(1, 1),
type = 'scatter',
mode = 'markers'))
})
}
shinyApp(ui, server)
library(shiny)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
plot_ly() %>%
layout(title="test") %>%
add_trace(x=runif(2), y=runif(2), name="ABC_test", type="scatter", mode="lines+markers")
})
observeEvent(input$update, {
plotlyProxy("graphe", session, FALSE) %>%
plotlyProxyInvoke("deleteTraces", list(as.integer(0))) %>%
plotlyProxyInvoke("addTraces", list(x=runif(2),
y=runif(2),
name="ABC_test",
type = 'scatter',
mode = 'lines+markers'))
})
}
shinyApp(ui, server)
restyle
API 有点靠不住...我忘记了推理,但是像 x
和 y
这样的数据数组需要双数组。我会这样做:
library(shiny)
library(plotly)
ui <- fluidPage(
actionButton("update", "Test"),
plotlyOutput("graphe")
)
server <- function(input, output, session) {
output$graphe <- renderPlotly({
plot_ly() %>%
add_markers(x = 0, y = 0, name = "ABC_test") %>%
layout(title = "test")
})
observeEvent(input$update, {
plotlyProxy("graphe", session) %>%
plotlyProxyInvoke("restyle", "y", list(list(1)), 0)
})
}
shinyApp(ui, server)