您好,我正在尝试创建一个闪亮的应用程序,在其中我要在图形上显示多少个订单是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中获得的“表格”数据框,而不是要创建可能的绘图或图形。
谢谢
答案 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")
这将在您选择的位置呈现所需的绘图。