ggplot не отображает данные на блестящем графике (предупреждение: удалены k строк, содержащих пропущенные значения (geom_point))

#r #csv #ggplot2 #shiny #data-visualization

#r #csv #ggplot2 #блестящий #визуализация данных

Вопрос:

При выполнении моего блестящего приложения у меня возникла следующая проблема. Что я пытаюсь, так это построить простой набор данных в ggplot. Во-первых, неважно, geom_point() или geom_line(), но входные данные должны быть набором данных csv, а ось x должна быть скорректирована на диапазон дат.

Моя проблема сейчас в том, что ggplot пуст после загрузки данных:

пустой ggplot

и предупреждающее сообщение выглядит следующим образом:

 Warning: Removed 8399 rows containing missing values (geom_point)
  

Он не появляется, когда я заменяю geom_point() на geom_line(), но ggplot остается пустым.

Полную таблицу csv можно загрузить здесь:

https://www.dropbox.com/s/xf7qtv7u2rcqdw9/sample_sales.csv?dl=0

Пользовательский интерфейс.Сценарий R выглядит следующим образом:

 shinyUI(pageWithSidebar(
  headerPanel("My App"),
  sidebarPanel(
    fileInput('file1', 'Choose CSV File',
              accept = c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),
    tags$hr(),
    checkboxInput('header', 'Header', TRUE),
    radioButtons('sep', 'Separator',
                 c(Comma = ',',
                   Semicolon = ';',
                   Tab = 't'),
                   'Comma'),
    radioButtons('quote', 'Quote',
                 c(None = '',
                   'Double Quote' = '"',
                   'Single Quote' = "'"),
                   'Double Quote'),
    dateRangeInput("daterange", "Date range:",
                 start = "2009-01-01",
                 end = "2012-12-30")),
    mainPanel(
      tabsetPanel(
          tabPanel("Sales", plotOutput("sales")),
          tabPanel("Category", plotOutput("category")),
          tabPanel("Table", tableOutput("contents")))
        )
    )
)
  

и сценарий server.R выглядит следующим образом:

 library(ggplot2)
library(shiny)
library(lubridate)

shinyServer(function(input, output) {
    sales <- reactive({

        inFile <- input$file1

        if (is.null(inFile))
        return(NULL)

        read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote)
    })
    range <- reactive({
        c(input$daterange[1], input$daterange[2])
    })

    output$contents <- renderTable({
            print(head(sales()))
        })
    output$sales <- renderPlot({
        sales.df <- sales()
        sales.df$Order.Date <- as.Date(sales.df$Order.Date, "%Y/%m/%d")
        sales.df$Profit <- as.numeric(sales.df$Profit)
        y.limit = c(min(sales.df$Profit), max(sales.df$Profit))
        p <- ggplot(sales.df, aes(x = Order.Date, y = Profit))   geom_point(size = 400)   scale_x_date(limits = c(input$daterange[1], input$daterange[2]))
        print(p)
        })

    output$category <- renderPlot({
        if (is.null(input$file1)) {
        return()
        }
        print(plot(sales()$sales[16]))
    })
})
  

Надеюсь, вы сможете мне помочь, заранее спасибо

Комментарии:

1. Я не пытался запустить ваш код, но предупреждающее сообщение предполагает, что ваш код устанавливает один из диапазонов осей в область, где нет данных. Или, возможно, ваш код случайно изменяет, скажем, значения даты каким-то образом, чтобы они оказались в NA x-диапазоне графика или за его пределами.

2. Я смог запустить его с помощью этого изменения: sales.df$Order.Date <- as.Date(as.character(sales.df$Order.Date, "%Y/%m/%d")) и удалить параметр размера точки из geom_point. Это должно помочь вам начать. Вероятно, вам также нужно исправить выбор даты…

3. @eipi10, когда я запускаю обновление кода. Дата импортируется как фактор. При локальном запуске как. Дата приводит к добавлению NA как.символ не приводит к NA…

4. Да, ваш код не выдает NA , потому что вы включили "%Y/%m/%d" в качестве аргумента as.character as.character игнорируете его), а не в качестве аргумента as.Date . Будь то Order.Date фактор или символ, as.Date(sales.df$Order.Date) преобразует его в формат даты. Но если вы включите "%Y/%m/%d" в as.Date , вы получите NA в любом случае.

5. Да, но as.Date в любом случае предполагает этот формат, поэтому вам не нужно его добавлять.