使用 R Shiny 和 plotly 制作散点图

Using R Shiny with plotly to make a scatterplot

我是 Rshiny 的新手,我想弄清楚为什么我的代码没有给我一个绘图。我有一个名为 'final' (tbl_df) 的文件,其中包含我使用的所有列。我正在尝试绘制一个散点图,其中 x 轴和 y 轴都具有相同的列表(在下拉列表中),并试图查看这些值每周如何变化。

当我 运行 应用程序时,我得到一个空白图表,但我可以点击我的三个下拉菜单(选择一周、x 轴和 y 轴)。但是,当我点击下拉菜单的不同值时,除了 x 轴和 y 轴标签发生变化外什么也没有发生。

它是这样的: figure 1

我想知道我是否必须对我的 x 和 y 值以及 'Week' 使用反应式才能工作?我担心缩放是否也是我遇到问题的原因。

这是我的..

library(shiny)
library(plotly)

ui <- fluidPage(

   titlePanel("Weekly updates"),

   sidebarLayout(
      sidebarPanel(
           selectInput(inputID = "Week", label= "Choose a week:", choices =unique(final$Week), selected ="44"),

           selectInput(inputId = "y", label = "y-axis", 
                       choices =c("Height","Weight","Color", "Shape"), 
                       selected = "Height"),
     
           selectInput(inputId = "x", label = "x-axis", 
                       choices =c("Height", "Weight", "Color", "Shape")
                       selected = "Weight")
),

      mainPanel(
         plotlyOutput(outputId = "scatter")
      )
   )
)

server <- function(input, output) {

   output$scatter <-renderPlotly({

         plot_ly(data=final) %>%
       add_trace(x=~input$x, y=~input$y,
                 type= 'scatter', mode = 'markers',
                 text = final$Sample,
                 hoverinfo = 'text'
                 showlegend = F)
   })
}

shinyApp(ui = ui, server = server)

input$xinput$y return 字符,所以这解析为类似 add_trace(x=~"Height", y=~"Weight",... 而不是 add_trace(x=~Height, y=~Weight,....

不过,您可以将其转换为公式

       plot_ly(data=final) %>%
       add_trace(x = as.formula(paste0("~",input$x)),
                 y = as.formula(paste0("~",input$y)),
                 type= 'scatter', mode = 'markers',
                 text = final$Sample,
                 hoverinfo = 'text'
                 showlegend = F)

我明白了。这是我的代码中唯一需要更改的部分...感谢您的帮助!

server <- function(input, output) {

output$scatter <- renderPlotly ({
   plot_ly(data=filter(final, Week == input$Week)) %>%
      add_trace(
        x= as.formula(paste0("~`", input$x, "`")),
        y= as.formula(paste0("~`", input$y, "`")),
        type = 'scatter'
        mode = 'markers'
        text = filter(final, Week == input$Week)$Sample,
        hoverinfo = 'text'
        showlegend = F)
   })
}