在ShinyR上创建情节

时间:2019-02-21 12:41:36

标签: r ggplot2 shiny shinydashboard

您好,我正在尝试创建一个闪亮的应用程序,在其中我要在图形上显示多少个订单是In / Out TAT(24小时内发货,如果不是,则是In TAT,然后是Out TAT)。

这是在广播和处理我在server.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))

  })

到目前为止,我只是显示在server.R中获得的“表格”数据框,而不是要创建可能的绘图或图形。

谢谢

1 个答案:

答案 0 :(得分:1)

当创建一个闪亮的对象时,必须将两件事当做一个单独的对象: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")

这将在您选择的位置呈现所需的绘图。