使用 R shiny 中的选定输入更改文本和绘图

Changing text and plots with selected input in R shiny

我想根据绘图的 select 参数更改框中的文本。从而文字和情节同时变化

所以在那个工作示例中:

如果下拉菜单 selects Sepal.width.

,我希望得到文本输出:“bliblablub”

如果下拉菜单 selects Sepal.Length.

,我希望得到文本输出:“some text”

如果下拉菜单 selects Petal.Length.

,我希望得到文本输出:“完成不同的东西”

如果下拉菜单 selects Petal.Width.

,我希望得到文本输出:“new stuff”

因为我在原始数据框中有 15 个参数,所以我也很想获得处理每个参数的文本输入的提示。理想情况下,我会从第二个数据框中获取文本(具有相同的列名?)。

到目前为止,我不明白如何组合 select 输入、文本框和绘图框。

非常感谢您的帮助!

library(shiny)
library(shinydashboard)
#data
dat <-iris

#producing parameters for select input
param <- colnames(dat)
param <- param[1:4]


#ui
Header<- dashboardHeader(title = "Iris")

Sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem("Parametro", tabName = "parametro", icon = icon("car"))
  )
)

Body <- dashboardBody(
  tabItems(
    tabItem(tabName = "parametro",
            column(width = 12,
                   box(
                     plotOutput("boxplot_species")),
                   fluidRow(
                     box(
                       selectInput("parametro", "Parametros:",
                                   param), width = 6),
                     box(
                       textOutput("description"))
                   )    
            ))
  ))

ui <- dashboardPage(Header,
                    Sidebar,
                    Body)

server <- function(input, output) {
  output$description <- renderText({
    "bliblablub"
  })
  output$boxplot_species <- renderPlot({
    ggplot(dat) +
      aes(x = Species, fill = Species) +
      aes_string(y = input$parametro) +
      geom_boxplot()
  })
}
shinyApp(ui, server)

您可以使用 switch 根据下拉选择更新文本,并将 aes_string 替换为 .data,因为 aes_string 已弃用。

library(shiny)
library(shinydashboard)
library(ggplot2)

Header<- dashboardHeader(title = "Iris")

Sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem("Parametro", tabName = "parametro", icon = icon("car"))
  )
)

Body <- dashboardBody(
  tabItems(
    tabItem(tabName = "parametro",
            column(width = 12,
                   box(
                     plotOutput("boxplot_species")),
                   fluidRow(
                     box(
                       selectInput("parametro", "Parametros:",
                                   param), width = 6),
                     box(
                       textOutput("description"))
                   )    
            ))
  ))

ui <- dashboardPage(Header,
                    Sidebar,
                    Body)

server <- function(input, output) {
  output$description <- renderText({
    text <- switch(input$parametro,
            Sepal.Length = 'x', 
            Sepal.Width = 'y',
            Petal.Length = 'other',
            Petal.Width  = 'more'
    )
    paste(text, "is blabla")
  })
  output$boxplot_species <- renderPlot({
    ggplot(dat) +
      aes(x = Species, y = .data[[input$parametro]], fill = Species) +
      geom_boxplot()
  })
}
shinyApp(ui, server)


为了保持代码整洁,您还可以使用 Species 和相应的值创建一个查找数据框。

lookup_df <- data.frame(Species = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"), 
                        value = c('x', 'y', 'other', 'more'))

然后把description代码改成-

 output$description <- renderText({
    lookup_df$value[match(input$parametro, lookup_df$Species)]
  })