我使用的数据库与mtcars不同,但为了让这个例子具有可重现性,我将在这里使用它。
我尝试使用滑块和两个选择器创建应用。
基本上,如果我只选择一列,我知道如何创建一个selectInput。在下面的代码中,我只需要selectInput("cylinput", "input", choices = c(all of my choices)
并将cyl == input$cylinput
添加到过滤器函数中。
也就是说,如果我想为数据框中的所有列创建两个selectInput,那么我就不知道如何做到这一点。好吧,我不知道如何在服务器端执行此操作。
代码在这里:
UI:
library(shiny)
library(ggplot2)
library(dplyr)
head(mtcars)
ui <- fluidPage(
titlePanel("My App"),
sidebarLayout(
sidebarPanel(
sliderInput("mpginput", "mpg", min = 10.4, max = 33.9, value = c(10.4, 33.9)),
selectInput("xcol", "X Axis", names(mtcars)),
selectInput("ycol", "Y Axis", names(mtcars))
),
mainPanel(plotOutput("plot1"))
)
)
服务器
server <- function(input, output){
output$plot1 <- renderPlot({
Filtered <- mtcars %>%
filter(
mpg >= input$mpginput[1],
mpg <= input$mpginput[2]
)
ggplot(Filtered, aes(x = mpg, y = qsec)) +
geom_point()
})
}
shinyApp(ui = ui, server = server)
我在研究时遇到了这个例子,它做了类似于我想做的事情。但是,我不熟悉基本图形或用于创建绘图的代码: http://shiny.rstudio.com/gallery/kmeans-example.html
非常感谢任何帮助。 谢谢。
答案 0 :(得分:2)
我明白了。抱歉措辞不好的问题。老实说,我对Shiny很新,并且不太了解代码。
基本上,我所做的一切都是使用choices = c()
而不是names(mtcars)
,这对我不起作用。
然后调用输入$ xcol并在ggplot2图中输入$ ycol。
<强> UI:强>
library(shiny)
library(ggplot2)
library(dplyr)
head(mtcars)
ui <- fluidPage(
titlePanel("My App"),
sidebarLayout(
sidebarPanel(
sliderInput("mpginput", "mpg", min = 10.4, max = 33.9, value = c(10.4, 33.9)),
selectInput("xcol", "X Axis", choices = c("mpg","cyl","hp","drat","disp","wt","gear","carb","am","vs")),
selectInput("ycol", "Y Axis", choices = c("mpg","cyl","hp","drat","disp","wt","gear","carb","am","vs"))
),
mainPanel(plotOutput("plot1"))
)
)
服务器强>
server <- function(input, output){
output$plot1 <- renderPlot({
Filtered <- mtcars %>%
filter(
mpg >= input$mpginput[1],
mpg <= input$mpginput[2]
)
ggplot(Filtered) +
geom_point(aes_string(x = input$xcol, y = input$ycol))
})
}
shinyApp(ui = ui, server = server)