#r #csv #ggplot2 #shiny #data-visualization
#r #csv #ggplot2 #блестящий #визуализация данных
Вопрос:
При выполнении моего блестящего приложения у меня возникла следующая проблема. Что я пытаюсь, так это построить простой набор данных в ggplot. Во-первых, неважно, geom_point() или geom_line(), но входные данные должны быть набором данных csv, а ось x должна быть скорректирована на диапазон дат.
Моя проблема сейчас в том, что 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
в любом случае предполагает этот формат, поэтому вам не нужно его добавлять.