r语言 - 甘特图使用 DiagrammeR 绘制闪亮的问题



我在使用 DiagrammeR 的美人鱼绘图函数在 Shiny 中显示甘特图时遇到问题。

一切都按预期执行,但是绘图显示在 R 工作室的查看器中,而不是在闪亮的页面上(该页面有一个用于显示绘图的选项卡面板)。我已经看到使用 ggVis 询问/解决了这一点..但是,该实例中的解决方案特定于 ggVI。我想留在DiagrammeR/美人鱼,因为它产生了如此好看的情节。

附上了一个最小的可执行示例:-)

library(shiny)
library(lubridate)
library(DiagrammeR)
  # --- Input datafile
         AllData <- data.frame(Project = c("Phoenix", "Phoenix", "Phoenix"),  
                          task = c("Establish plan", "Build management tool", "Get funding"),
                          status = c("done", "active", "crit, active"),
                          pos = c("first_1", "first_2", "import_1"),
                          start = c("2018-12-01", "2019-01-21", "2019-02-01"),
                          end = c("12w 6d", "4w", "8w 1d"),
                          stringsAsFactors = FALSE)
  # Define UI for application
ui <- fluidPage(
      titlePanel("XXX Project Management Tool"),
         sidebarLayout(
           sidebarPanel(                       # --- setup LHS data input frames ---

              selectInput("Proj", "Project",
                        c(unique(as.character(AllData$Project)))),

              selectInput("Stg", "Stage",
                         c("All", unique(as.character(AllData$name)))),
                  width = 3),
         mainPanel(
             tabsetPanel(type = "tabs",
                tabPanel("Gantt Chart", plotOutput("plot")),
                tabPanel("Data Table", tableOutput("table"))))
     )
   )
server <- function(input, output) {
  # --- filter the selected project into a reactive function (access later using () suffix) ---
  SelectedProject <- reactive({dplyr::filter(AllData, Project == input$Proj)})
  output$plot <- renderPlot({
    mermaid(
      paste0(
        "gantt", "n", 
        "dateFormat  YYYY-MM-DD", "n", 
        "title Gantt Chart - Project ", input$Proj, "n",
        # --- unite the first two columns (task & status) and separate them with ":" ---
        # --- then, unite the other columns and separate them with "," ---
        paste(SelectedProject() %>%
                unite(i, task, status, sep = ":") %>%
                unite(j, i, pos, start, end, sep = ",") %>%
                .$j, 
              collapse = "n"
        ), "n"
      )
    )
  })
  output$table <- renderTable({SelectedProject()})   

}       

# --- run application ---
shinyApp(ui = ui, server = server)

绘图最终显示在查看器中 - 但是另一个选项卡面板按预期显示表格数据。

您需要使用 DiagrammeROutput() 而不是 plotOutput()renderDiagrammeR() 而不是 renderPlot()

library(shiny)
library(lubridate)
library(DiagrammeR)
library(tidyr)
# --- Input datafile
AllData <- data.frame(Project = c("Phoenix", "Phoenix", "Phoenix"),  
                      task = c("Establish plan", "Build management tool", "Get funding"),
                      status = c("done", "active", "crit, active"),
                      pos = c("first_1", "first_2", "import_1"),
                      start = c("2018-12-01", "2019-01-21", "2019-02-01"),
                      end = c("12w 6d", "4w", "8w 1d"),
                      stringsAsFactors = FALSE)
# Define UI for application
ui <- fluidPage(
  titlePanel("XXX Project Management Tool"),
  sidebarLayout(
    sidebarPanel(                       # --- setup LHS data input frames ---

      selectInput("Proj", "Project",
                  c(unique(as.character(AllData$Project)))),

      selectInput("Stg", "Stage",
                  c("All", unique(as.character(AllData$name)))),
      width = 3),
    mainPanel(
      tabsetPanel(type = "tabs",
                  tabPanel("Gantt Chart", DiagrammeROutput("plot")),
                  tabPanel("Data Table", tableOutput("table"))))
  )
)
server <- function(input, output) {
  # --- filter the selected project into a reactive function (access later using () suffix) ---
  SelectedProject <- reactive({dplyr::filter(AllData, Project == input$Proj)})
  output$plot <- renderDiagrammeR({
    mermaid(
      paste0(
        "gantt", "n", 
        "dateFormat  YYYY-MM-DD", "n", 
        "title Gantt Chart - Project ", input$Proj, "n",
        # --- unite the first two columns (task & status) and separate them with ":" ---
        # --- then, unite the other columns and separate them with "," ---
        paste(SelectedProject() %>%
                unite(i, task, status, sep = ":") %>%
                unite(j, i, pos, start, end, sep = ",") %>%
                .$j, 
              collapse = "n"
        ), "n"
      )
    )
  })
  output$table <- renderTable({SelectedProject()})   

}       

# --- run application ---
shinyApp(ui = ui, server = server)

相关内容

  • 没有找到相关文章

最新更新