Shiny和ggplot - 同时使用scale_x_和scale_y_continuous时出错

时间:2015-06-19 00:56:29

标签: r shiny

背景:这是一个奇怪的问题。从本质上讲,我正在开发一个闪亮的应用程序,人们可以从特定网站上取出csv导出,上传然后与之互动。由于数字很大(数百万),因此默认为科学记数法,这在眼睛上并不容易,因此我尝试使用“labels =逗号”来纠正这一点。

问题:当我在ggplot函数中同时包含scale_x_cont和scale_y_cont时,应用程序崩溃了。当我在那里只有x或y时,它运行正常。

现在我尝试编写尽可能最小的可重复代码片段,但是当我使用mtcars和相同的selectInput方法创建一个简单的代码时,它运行正常,没有错误同时使用scale_x_cont和scale_y_cont ... < / p>

错误

eval中的错误(替换(expr),envir,enclos):   geom_point需要以下缺失的美学:x,y 错误:geom_point需要以下缺失的美学:x,y

使用

复制的最小CSV

https://raw.githubusercontent.com/nzcoops/datasets/master/dump_test

应用

require(shiny)
require(DT)
require(ggplot2)
require(scales)
runApp(
  list(
    ui = fluidPage(
      sidebarPanel(fileInput('file1', 'Choose CSV File',
                             accept=c('text/csv', 
                                      'text/comma-separated-values,text/plain', 
                                      '.csv')),
                   htmlOutput("contents2"),
                   htmlOutput("contents3")
      ),
      mainPanel(
        plotOutput("plot1"),
        dataTableOutput("contents4")
      )
    ),

    server = function(input, output, session) {

      contents1 <- reactive({
        inFile <- input$file1
        if (is.null(inFile))
          return(NULL)
        dat <<- read.csv(inFile$datapath)
        dat[,2:5] <<- lapply(dat[,2:5],function(x){as.numeric(gsub(",", "", x))})
        names(dat)
      })

      output$contents2 <- renderUI({
        if (is.null(input$file1))
          return(NULL)
        selectInput('columnsx', 'Columns X', contents1()[3:5])
      })

      output$contents3 <- renderUI({
        if (is.null(input$file1))
          return(NULL)
        selectInput('columnsy', 'Columns Y', contents1()[3:5])
      })

      output$contents4 <- renderDataTable({
        if (is.null(input$file1))
          return(NULL)
        dat
      }, options = list(paging = FALSE, searching = FALSE))

      output$plot1 <- renderPlot({
        if (is.null(input$file1))
          return(NULL)
        p <- ggplot(dat, aes_string(x=input$columnsx, y=input$columnsy)) +
          geom_point() + 
          scale_x_continuous(labels = comma) #+ scale_y_continuous(labels = comma)
        # Remove the above hash and the presence of scale_y_ will crash app
        print(p)
      })
    }
  ))

1 个答案:

答案 0 :(得分:1)

你在函数中有一些时髦的范围。如果用这个替换函数的第一行:

p <- ggplot(dat, aes_string(x=dat[input$columnsx], y=dat[input$columnsy]))

它会画好。