有光泽的:绘制从数据集到图形的选定列

时间:2014-09-23 17:18:15

标签: r shiny shiny-server

只是发现闪亮的应用程序,但这让我疯了......我看了很多server.R和ui.R代码的例子,无法弄清楚我做错了什么。如果它是非常基本的东西,请提前道歉..........

以虹膜数据集为例,我想绘制一列与另一列,使用qplot或ggplot

然而,使用qplot我得到这个: qplot output

并使用ggplot2,我收到错误: ggplot output

我认为我不需要反应函数,因为我没有对数据集进行子集化,只是提取列进行绘图。

server.R code

library(shiny)
library(shinyapps)
library(ggplot2)

shinyServer(function(input, output, session) {

    output$text1 <- renderText({input$id1})

    output$text2 <- renderText({input$select1})

    output$plot1 <- renderPlot({
            g <- qplot(Sepal.Length, input$select1, data = iris)
            print(g)
    })

})

或使用ggplot函数替换qplot调用

            g <- ggplot(iris, aes(x = Sepal.Length, y = input$select1)) 
            g <- g + geom_line(col = "green", lwd =1) + 
                    labs(x = "Date", y = "Ranking") + 
                    theme_bw() + scale_y_reverse()

ui.R代码

library(shiny)
library(shinyapps)
data(iris)
opts <- unique(colnames(iris))
opts <- opts[-1] ## want to keep Sepal.Length as the x values

shinyUI(pageWithSidebar(
    headerPanel('test with iris database'),
    sidebarPanel(
            selectInput(inputId = "select1", label = "select", 
                        choices = opts),
            textInput(inputId = "id1", label = "Input Text", "")
    ),
    mainPanel(
            p('Output text1'),
            textOutput('text1'),
            textOutput('text2'),
            plotOutput('plot1')
    )
))

1 个答案:

答案 0 :(得分:5)

将您的aes语句更改为aes_string并将x更改为字符串。这应该可以解决问题。

g <- ggplot(iris, aes_string(x = "Sepal.Length", y = input$select1)) 
g <- g + geom_line(col = "green", lwd =1) +
     labs(x = "Date", y = "Ranking") + 
     theme_bw() + scale_y_reverse()