Использование Proxy Interface в Plotly / Shiny для динамического изменения данных - PullRequest
0 голосов
/ 31 мая 2018

Я хочу обновить данные, представленные на графике (отображаются в plotlyOutput в приложении Shiny), используя Прокси-интерфейс .Вот минимальный код 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) (как хотелось бы), но когда я нажимаю кнопку «Тест»точка не перемещается в (0,1).Как мне этого добиться?

Спасибо за любой ответ.

Ответы [ 3 ]

0 голосов
/ 17 июня 2019
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)
0 голосов
/ 12 июля 2019

API restyle немного неудобен ... Я забыл об этом, но массивы данных, такие как 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)
0 голосов
/ 09 июня 2018

Как ни странно 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...