Создание сюжета на ShinyR - PullRequest
       10

Создание сюжета на ShinyR

0 голосов
/ 21 февраля 2019

Здравствуйте, я пытаюсь создать блестящее приложение, в котором я хочу отобразить, сколько заказов было на графике In / Out TAT (Доставлено в течение 24 часов, затем In TAT, если нет, то Out TAT).

Это то, что таблица после dcasting & манипулирования необработанными данными, которые я имел со мной на сервере. R

WareHouse  Order Date   In TAT   Out TAT
W-1        2019-02-14   431      5
W-1        2019-02-15   533      10
W-1        2019-02-16   234      64
W-1        2019-02-17   456      12
W-2        2019-02-14   123      11
W-2        2019-02-15   787      56
W-2        2019-02-16   234      89
W-2        2019-02-17   221      23
W-3        2019-02-14   111      12
W-3        2019-02-15   789      56
W-3        2019-02-16   345      98
W-3        2019-02-17   897      45

Теперь я хочу построить график на первой странице моего shinyapp, где я мог бы показать, сколько заказовбыли в TAT и из другого склада в разные даты.

Вот то, чего я достиг на данный момент.

UI.R

library(shiny)
library(DT)
library(gtools)



shinyUI(

  fluidPage(
    navbarPage(
       title = 'Dashboard',
      tabPanel('Overview'),
       tabsetPanel(
         tabPanel('In/Out TAT Details',
                 fluidRow(
                    # plotlyOutput("overview"),
                    DT::dataTableOutput("view_fwd"),width = 6
                  ) )
         ),
       tabPanel('B2C Details'  
       ))))

В Server.R я читаю файл и вычисляю TAT ордеров и создаю таблицу, показанную выше

library(shiny)
library(ggplot2)



shinyServer(
  function(input, output) {

overview <- reactive({  
  library(DT)
  library(RPostgreSQL)
  library(markdown)
  library(dplyr)
  library(reshape2)
  library(ggplot2)
  library(plotly)

  m <- read.csv("/data/xia2.csv", header=TRUE, sep=",")
  x <- m[,c("Order.ID","Warehouse","order.time","deliver.Time")]
  x$deliver.Time <- as.POSIXct(x$deliver.Time , format='%m-%d-%Y %H:%M')

  x$order.time <- (as.POSIXct(x$order.time, format='%m-%d-%Y %H:%M'))


  # as.character
  x$diff <- (difftime(x$deliver.Time,x$order.time,units="days"))
  x$TAT <- ifelse(x$diff > 1, paste("Out TAT"), paste("In TAT"))
  x$date <- as.Date(x$deliver.Time)

  table <- dcast(x, Warehouse + date ~  TAT,value.var = "Order.ID", fun.aggregate = length, margins = TRUE)
  table <- table[which(table$date !="(all)"),]


  })

output$view_fwd <-  DT::renderDataTable(DT::datatable({

  view_fwd <- overview()
},class = 'cell-border stripe',options = list(pageLength = 50),
rownames= FALSE))

  })

На данный момент я просто отображаю фрейм данных 'table', полученный на сервере. R, вместо этого я хочу создать график или график, которые когда-либо будут возможны.

Спасибо

1 Ответ

0 голосов
/ 21 февраля 2019

Когда вы создаете блестящий объект, вы должны думать о двух вещах как об отдельном: объект ui и объект server (вещи усложняются позже, но проще начать таким образом)

Всякий раз, когда вы хотите показать график в блестящем, сначала вы должны создать объект графика, используя renderPlot в разделе server (это создает объект, который будет визуализирован впоследствии) в качестве выходных данных объект.Во-вторых, используйте plotOutput в разделе ui для отображения объекта в блестящем приложении.

Краткий пример:

В разделе server: я выбрал любые переменные x и y только для общей идеи

output$plot <- renderPlot{ggplot(dat,aes(x=x,y=y)) + geom_line()}

В разделе ux (внутри раздела, в котором вы хотите разместить свой график): я выбрал разрешение 1400x600 из-за личных предпочтений

plotOutput("plot", width = "1400px", height = "600px")

Это должно отобразить нужный вам участок в выбранном вами месте.

...