在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动

Posted

技术标签:

【中文标题】在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动【英文标题】:Plotly scatter plot in Shiny in R; plot is not updating nor is it fully interactive 【发布时间】:2021-12-06 06:40:54 【问题描述】:

我正在尝试使用 plotly 库在 Shiny 中创建交互式散点图,我可以在其中绘制分组数据并将光标移动到每个数据点上。我是 plotly 的新手,但我已经广泛使用 Shiny。

这是我想出的一个模拟示例:-


library(shiny)
library(shinyWidgets)
library(plotly)
library(tidyverse)


ui<-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 <- function(input,output,session)
  
  observeEvent(input$eda_run,
    output$eda_scatter_graph<- renderPlotly(
      iris%>%
        group_by(Species)%>%
        summarise_at(vars(Sepal.Length:Petal.Width),mean)%>%
        plot_ly(x=input$eda_scatter_x, y=input$eda_scatter_y, size=I(c(100,50)))%>%
        add_markers()
        
    )
  )



shinyApp(ui,server)


这给出了这个输出:-

期望的输出

我想要做的是绘制分组数据点,所以当我的光标移动到数据点上时,标记能够告诉我 x 轴和 y 轴坐标以及分组变量名称 (在这种情况下,Species)。最后,我希望能够使用 selectInput 框更新 x 轴和 y 轴,但是当您运行应用程序时,它不会更新。

谁能告诉我我做错了什么并提出修改建议?

谢谢:)

【问题讨论】:

【参考方案1】:

不要使用观察事件,而是使用反应值,并让内部处理其余部分

library(shiny)
library(plotly)



ui<-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 <- function(input,output,session)
  
  x <- reactive(
    iris[,input$xcol]
  )
  
  y <- reactive(
    iris[,input$ycol]
  )
  
  color <- reactive(
    iris[,input$color]
  )

    output$eda_scatter_graph<- renderPlotly(
    plot1<- plot_ly( x=x(), y=y(), type = 'scatter',
                     mode = 'markers', color = color())
      
    )
  



shinyApp(ui,server)

【讨论】:

太棒了,这正是我所追求的,谢谢:)

以上是关于在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动的主要内容,如果未能解决你的问题,请参考以下文章

2018-10-31用R绘制散点图矩阵(成对的散点图)

如何在 matplotlib 中制作 3D 散点图

【R语言】--- 散点图

R绘图基础指南 3. 散点图(合集)

闪亮的地图上的散点图

R绘制散点图以及带圈定的散点图(Scatterplot With Encircling)