r - 如何根据我选择的列在 rshiny 中绘图
问题描述
我制作了一个闪亮的应用程序,它可以接收任何数据并根据数据显示列名。
c1 <- rnorm(10,0,1)
c2 <- c(rep("txA",5),rep("txB",5))
c3 <- c(1:4,1:4,1:2)
c4 <- rep(LETTERS[1:5],2)
mydata <- data.frame(c1,c2,c3,c4)
ui <- fluidPage(
fileInput(inputId = "file",
label = "import file"),
tableOutput("tb"),
sidebarLayout(
sidebarPanel(
uiOutput(outputId = "aa")
),
mainPanel(textOutput("a"),
verbatimTextOutput("info"),
verbatimTextOutput("summary"),
plotOutput("plot", click = "plot_click")
)
)
)
server <- function(input,output) {
output$aa <- renderUI({
validate(need(input$file != "", ""))
mydata <- read.csv(input$file$datapath)
selectInput(inputId = "aa", #can be any name?
label="Select:",
choices = colnames(mydata))
})
output$tb <- renderTable({
data <- input$file
if (is.null(data))return()
read.table(data$datapath,sep=",")
})
output$summary <- renderPrint({
summary(mydata)
})
output$plot <- renderPlot({
plot(mydata)
})
output$info <- renderText({
paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y)
})
}
shinyApp(ui=ui, server=server)
如果我运行它,我会得到以下信息:
我正在尝试制作一个闪亮的应用程序,它根据我选择的列显示基本图。我该怎么做?
解决方案
这样的事情会做,确保取消注释文件输入
library(shiny)
c1 <- rnorm(10,0,1)
c2 <- c(rep("txA",5),rep("txB",5))
c3 <- c(1:4,1:4,1:2)
c4 <- rep(LETTERS[1:5],2)
mydata <- data.frame(c1,c2,c3,c4)
ui <- fluidPage(
fileInput(inputId = "file",
label = "import file"),
tableOutput("tb"),
sidebarLayout(
sidebarPanel(
uiOutput(outputId = "aa")
),
mainPanel(textOutput("a"),
verbatimTextOutput("info"),
verbatimTextOutput("summary"),
plotOutput("plot", click = "plot_click")
)
)
)
server <- function(input,output) {
output$aa <- renderUI({
#validate(need(input$file != "", ""))
#mydata <- read.csv(input$file$datapath)
## Since your output$aa already has name aa you cant use it twice!
selectInput(inputId = "aa2", #can be any name?
label="Select:",
choices = colnames(mydata))
})
output$tb <- renderTable({
data <- input$file
if (is.null(data))return()
read.table(data$datapath,sep=",")
})
mysubsetdata <- eventReactive(input$aa2,{
mydata[[input$aa2]]
})
output$summary <- renderPrint({
summary(mysubsetdata())
})
output$plot <- renderPlot({
plot(mysubsetdata())
})
output$info <- renderText({
paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y)
})
}
shinyApp(ui=ui, server=server)
- 添加
eventReactive
收听selectInput
- 所有小部件都必须具有唯一的 id,因此您不能使用
aa
两次,一次用于 renderui,一次用于 selectInput
推荐阅读
- android - 如何在包中将数据类作为 Parcelable 传递?
- here-api - 在嵌入式 Web 浏览器中使用 HERE
- java - 对列表中的所有项目执行一个任务,然后在 RxJava 中执行另一个任务
- css - 如何更改禁用的复选框颜色
- c# - GridViewCheckBoxColumn 标题中的标题和复选框 Telerik c#
- javascript - 基于数组中不同位置的相同键合并对象
- css - React/Webpack 将样式应用于标签而不是类/ID
- c++ - C++编程中内存分配较多时如何处理异常
- flutter - BoxDecoration 小部件缺少填充属性
- javascript - ECMAScript-6 标准的默认参数