#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. Фантастика, это именно то, чего я добивался, спасибо 🙂