使用 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)]
})
我想根据绘图的 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)]
})