【问题标题】:Formatting/aligning rCharts (nvd3) in shiny app在闪亮的应用程序中格式化/对齐 rCharts (nvd3)
【发布时间】:2015-06-05 17:51:44
【问题描述】:

我正在开发一个闪亮的应用程序,我希望它看起来像下面的图片:

但是,当我尝试实现这一点时,我只能得到以下表格:

我正在寻找如何使输出整齐地收集,并希望得到任何帮助。我在这里查看了其他几个类似的问题,即。 thisthis,但不认为他们回答了我的问题(第一次谈到添加 mainPanel,但我使用的是 FludiPageFluidRows。我原以为列和行会自动调整屏幕大小,并且 12 列被设计为适合屏幕大小,但显然我错了吗?

非常感谢您的帮助。

用于复制/粘贴的 Server.R 文件。抱歉,有点长:

#
#
# load libraries, scripts, data

library(shiny)
library(shinyapps)
library(shinydashboard)
library(dplyr)
library(tidyr)
library(lubridate)
library(htmlwidgets)

options(shiny.trace = TRUE,
      shiny.maxRequestSize=300*1024^2)



## body of shiny server side program

shinyServer(function(input, output, session) {


dataList <- reactive({
        if(is.null(input$uploadFile)){     
        return(NULL)
        }
        uploadFileInfo <- input$uploadFile
        uploadData <- read.csv(uploadFileInfo$datapath, header = TRUE, stringsAsFactors = FALSE)

        uploadedData <- tbl_df(uploadData) %>% 
                mutate(yearValue = year(dateValues), monthValue = month(dateValues))

        sumData1 <- uploadedData %>% 
            select(yearValue, earnPts, earnCount, redemPts, redemCount, churnCount, acquisCount) %>% 
            gather(metrics, totals, -yearValue) %>%
            group_by(yearValue, metrics) %>%
            summarise(yearlyTotals = sum(totals)) %>%
            arrange(yearlyTotals)

        sumData2 <- uploadedData %>%  
            select(yearValue, monthValue, earnPts, earnCount, redemPts, redemCount, churnCount, acquisCount) %>%
            gather(metrics, totals, -c(yearValue, monthValue)) %>%
            group_by(yearValue, monthValue, metrics) %>%
            summarise(yearmonthTotals = sum(totals)) %>%
            arrange(yearValue, monthValue) %>%
            group_by(yearValue, metrics) %>%
            mutate(cumulatives = cumsum(yearmonthTotals))

        sumData3 <- uploadedData %>% 
            select(yearValue, monthValue, earnPts, earnCount, redemPts, redemCount, churnCount, acquisCount) %>%
            group_by(yearValue, monthValue) %>%
            summarise_each(funs(mean)) %>% 
            round()

        sumData4 <- uploadedData %>% 
            group_by(dateValues) %>%
            summarise_each(funs(sum))

        earnData <- sumData4 %>%
            select(earnPts, earnCount)
        row.names(earnData) <- sumData4$dateValues

        redempData <- sumData4 %>%
            select(redemPts, redemCount)
        row.names(earnData) <- sumData4$dateValues

        custData <- sumData4 %>%
            select(churnCount, acquisCount)
        row.names(earnData) <- sumData4$dateValues

        sumData5 <- uploadedData %>% 
            group_by(dateValues) %>%
            summarise_each(funs(sum))

        earnTSData <- sumData5 %>%
            select(earnPts, earnCount)
        row.names(earnTSData) <- sumData5$dateValues

        redemTSData <- sumData5 %>%
            select(redemPts, redemCount)
        row.names(redemTSData) <- sumData5$dateValues

        custTSData <- sumData5 %>%
            select(acquisCount, churnCount)
        row.names(custTSData) <- sumData5$dateValues


        dfList <- list(sumData1 = sumData1, sumData2 = sumData2, sumData3 = sumData3,
                   sumData4 = sumData4, earnData = earnData, redempData = redempData,
                   custData = custData, sumData5 = sumData5, earnTSData = earnTSData,
                   redemTSData = redemTSData, custTSData = custTSData)

        return(dfList)
})


### The main chart

output$outlinesChart <- renderChart2({
    myData <- dataList()$sumData1
    mainPlot <- nPlot(yearlyTotals ~ metrics, 
              group = 'yearValue', data = myData, type = 'multiBarChart')
    mainPlot$chart(margin=list(left=100)) 
    rm(myData)
    return(mainPlot)
})


### Information boxes

output$infoBox1 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("line-chart"),
      color = "blue"
    )
})

output$infoBox2 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("line-chart"),
      color = "blue"
    )
})

output$infoBox3 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("line-chart"),
      color = "blue"
    )
})

output$infoBox4 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("line-chart"),
      color = "blue"
    )
})

output$infoBox5 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("smile-o"),
      color = "blue"
    )
})

output$infoBox6 <- renderInfoBox({
    infoBox(
      "Progress", 10*2, icon = icon("frown-o"),
      color = "purple", fill = TRUE
    )
})



### Cumulative chart for points earned

output$cEarnPtsChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'earnPts')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


### Cumulative chart for count of earn transactions

output$cEarnCountChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'earnCount')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


### Cumulative chart for points redeemed

output$cRedemPtsChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'redemPts')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


### Cumulative chart for count of redemption transactions

output$cRedemCountChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'redemCount')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


### Cumulative chart for Customer Acquisition

output$cAcquisChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'acquisCount')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


### Cumulative chart for Customer Acquisition

output$cChurnChart <- renderChart2({
    myData <- dataList()$sumData2
    interimData <- myData %>% filter( metrics == 'churnCount')
    myPlot <- nPlot(cumulatives ~ monthValue, group = 'yearValue', 
            data = interimData, type = 'lineChart')
    rm(myData)
    rm(interimData)
    return(myPlot)
})


})

ui.R 文件:

### load libraries

library(shiny)
library(shinythemes)


### body for Shiny UI


shinyUI(navbarPage("My Sample Dashboard", theme = shinytheme('readable'), inverse = TRUE,
        tabPanel("Overview Section",
            fluidRow(
                column(6, 
                    ##current app only supports CSV, since this is a proof of concept...
                    fileInput(inputId = 'uploadFile', label = 'Please upload your file')
                    )
                  ),
            fluidRow(
                column(3,
                     h4('Main Chart goes here'),
                     showOutput('outlinesChart', 'nvd3')
                    ),
                column(3, offset = 5,
                     h5('Info boxes go here'),
                     infoBoxOutput('infoBox1'),
                     infoBoxOutput('infoBox2'),
                     infoBoxOutput('infoBox3'),
                     infoBoxOutput('infoBox4'),
                     infoBoxOutput('infoBox5'),
                     infoBoxOutput('infoBox6')
                    )
                   ),
            hr(),
            fluidRow(
                column(2, 
                     h5('Earned Points chart goes here'),
                    showOutput('cEarnPtsChart', 'nvd3')
                    ),
                column(2, offset = 4,
                    h5('Earn Count chart goes here'),
                    showOutput('cEarnCountChart', 'nvd3')
                    )
                   ),
            fluidRow(
                column(2, 
                     h5('Redeemed Points chart goes here'),
                     showOutput('cRedemPtsChart', 'nvd3')
                    ),
                column(2, offset = 4,
                    h5('Redemption Count chart goes here'),
                     showOutput('cRedemCountChart', 'nvd3')
                    )
                   ),
            fluidRow(
                column(2, 
                     h5('Customer Acquisition chart goes here'),
                     showOutput('cAcquisChart', 'nvd3')
                    ),
                column(2, offset = 4,
                    h5('Customer Churn chart goes here'),
                     showOutput('cChurnChart', 'nvd3')
                    )
                   )
              ),
        tabPanel("Details Section"),
        tabPanel("Experiments Section"))
)

编辑:

以下是生成要馈送到此应用程序的 CSV 文件的代码。

earnPtsRange <- 12000:18000
earnCountRange <- 1000:10000
redemPtsRange <- 10000:20000
redemCountRange <- 10000:20000
churnRange <- 1000:10000
acquisitionRange <- 800:15000





### obtained from Dirk Eddelbuettel: https://stackoverflow.com/questions/14720983/efficiently-generate-a-random-sample-of-times-and-dates-between-two-dates
generateDates <- function(N, st="2014/01/01", et="2015/08/31") {
st <- as.POSIXct(as.Date(st))
et <- as.POSIXct(as.Date(et))
dt <- as.numeric(difftime(et,st,unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
rt[order(rt)]
as.Date(rt)
}


## generate data; 10 readings for each month out of 20 months
dateValues <- generateDates(200)
earnPts <- sample(x = earnPtsRange, size = 190)
earnCount <- sample(x = earnCountRange, size = 190)
redemPts <- sample(x = redemPtsRange, size = 190)
redemCount <- sample(x = redemCountRange, size = 190)
churnCount <- sample(x = churnRange, size = 190)
acquisCount <- sample(x = acquisitionRange, size = 190)
## merge the generated data
toyData <- data.frame(dateValues = dateValues, earnPts = earnPts, earnCount = earnCount, redemPts = redemPts, redemCount = redemCount, churnCount = churnCount, 
acquisCount = acquisCount)


## write the data to a CSV file
write.csv(x = toyData, file = './toyDataset.csv', row.names = FALSE)

非常感谢。

【问题讨论】:

  • 求求你?

标签: r shiny nvd3.js rcharts


【解决方案1】:

我刚刚在我的 rCharts 分支上推送了我认为可以解决您问题的方法。它解决了我使用 rCharts 的响应能力和自动调整大小的问题。您使用它的方式是在showOutput 中指定宽度和高度参数。默认宽度为 100%,默认高度为 400px。 示例调用是showOutput("myGraph", "nvd3", height=555)

您可以从:https://github.com/clecocel/rCharts下载

您可以使用以下方式安装它:devtools::install_github("clecocel/rCharts")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2018-07-21
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多