Плотный точечный график в блестящем в R; график не обновляется и не является полностью интерактивным

#r #shiny #plotly #shinydashboard #shinywidgets

Вопрос:

Я пытаюсь создать интерактивную точечную диаграмму в Shiny, используя plotly библиотеку, где я могу отображать сгруппированные данные и перемещать курсор над каждой точкой данных. Я новичок plotly , но широко использовал Shiny.

Вот примерный пример, который я придумал:-

  library(shiny) library(shinyWidgets) library(plotly) library(tidyverse)   uilt;-fluidPage(  titlePanel("Iris"),  tabsetPanel(  tabPanel("Iris scatter",  sidebarPanel(width=5,  h5("Select the axis variables"),  selectInput("eda_scatter_x", "Select x-axis",  c("Sepal Length"="Sepal.Length",  "Sepal Width" ="Sepal.Width",  "Petal Length"= "Petal.Length",  "Petal Width"= "Petal.Width")),  selectInput("eda_scatter_y", "Select y-axis",  c("Sepal Length"="Sepal.Length",  "Sepal Width" ="Sepal.Width",  "Petal Length"= "Petal.Length",  "Petal Width"= "Petal.Width")),  actionButton(inputId = "eda_run", "Run analysis")),  mainPanel(  plotlyOutput("eda_scatter_graph")  )))  )   server lt;- function(input,output,session){    observeEvent(input$eda_run,{  output$eda_scatter_graphlt;- renderPlotly({  iris%gt;%  group_by(Species)%gt;%  summarise_at(vars(Sepal.Length:Petal.Width),mean)%gt;%  plot_ly(x=input$eda_scatter_x, y=input$eda_scatter_y, size=I(c(100,50)))%gt;%  add_markers()    })  }) }   shinyApp(ui,server)    

Что дает этот результат:-

введите описание изображения здесь

Желаемый результат

Что я хочу сделать, так это построить сгруппированные точки данных, чтобы, когда мой курсор перемещается по точкам данных, маркеры могли сообщить мне координаты по осям x и y плюс имя сгруппированной переменной (в данном случае Species ). Наконец, я хочу иметь возможность обновлять оси x и y с помощью selectInput полей, но при запуске приложения оно не обновляется.

Может ли кто-нибудь показать мне, что я делаю неправильно, и любезно предложить правки?

Спасибо 🙂

Ответ №1:

Не используйте событие наблюдения , а скорее реактивные значения, и позвольте графически обработать остальное внутри

 library(shiny) library(plotly)    uilt;-fluidPage(  titlePanel("Iris"),  tabsetPanel(  tabPanel("Iris scatter",  sidebarPanel(width=10,  h5("Select the axis variables"),  selectInput('xcol','X Variable', names(iris)),  selectInput('ycol','Y Variable', names(iris)),  selectInput('color','Group Color', names(iris)),    mainPanel(  plotlyOutput("eda_scatter_graph")  )  )  )  )  )   server lt;- function(input,output,session){    x lt;- reactive({  iris[,input$xcol]  })    y lt;- reactive({  iris[,input$ycol]  })    color lt;- reactive({  iris[,input$color]  })   output$eda_scatter_graphlt;- renderPlotly(  plot1lt;- plot_ly( x=x(), y=y(), type = 'scatter',  mode = 'markers', color = color())    )   }   shinyApp(ui,server)   

Комментарии:

1. Фантастика, это именно то, чего я добивался, спасибо 🙂