R Блестящий единый график для заполнения всей страницы панели инструментов - PullRequest
1 голос
/ 09 июля 2020

Я построил один график, который я хотел бы заполнить всю страницу Shiny dashboard. В основном приведенный ниже код работает для меня, за исключением того, что диаграмма всегда составляет половину высоты страницы, и я хотел бы, чтобы она заполняла всю высоту. Я пробовал использовать функцию fillPage () и другие решения на этом форуме, но, похоже, ни одно из них не работает в моей конкретной ситуации.

Ниже приведен воспроизводимый код и изображение того, что он производит. Спасибо.

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
    dashboardHeader(title = "Header"),

    sidebar <- dashboardSidebar(),
    body <- dashboardBody(
        fillPage(plotlyOutput("Waterfall", height="100%", width="100%"))
    ),
    dashboardPage(dashboardHeader(title="Title"), sidebar,body)
)
server <- shinyServer(function(input, output, session) {
    
  x= list("Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax")
  measure= c("relative", "relative", "total", "relative", "relative", "total")
  text= c("+60", "+80", "", "-40", "-20", "Total")
  y= c(60, 80, 0, -40, -20, 0)
  data = data.frame(x=factor(x,levels=x),measure,text,y)
  
  output$Waterfall <- renderPlotly({ plot_ly(
    data, name = "20", type = "waterfall", measure = ~measure,
    x = ~x, textposition = "outside", y= ~y, text =~text,
    connector = list(line = list(color= "rgb(63, 63, 63)")))   })
})
  
shinyApp(ui=ui, server=server)

Заполнить страницу

1 Ответ

1 голос
/ 09 июля 2020

Я добавил CSS строку

tags$style(type = "text/css", "#Waterfall {height: calc(100vh - 80px) !important;}"),

в этот раздел

 fillPage(
      tags$style(type = "text/css", "#Waterfall {height: calc(100vh - 80px) !important;}"),
      plotlyOutput("Waterfall", height="100%", width="100%"))
  ),

Это должно работать:

library(shiny)
library(shinydashboard)
library(plotly)

ui <- dashboardPage(
  dashboardHeader(title = "Header"),
  
  sidebar <- dashboardSidebar(),
  body <- dashboardBody(
    fillPage(
      tags$style(type = "text/css", "#Waterfall {height: calc(100vh - 80px) !important;}"),
      plotlyOutput("Waterfall", height="100%", width="100%"))
  ),
  dashboardPage(dashboardHeader(title="Title"), sidebar,body)
)
server <- shinyServer(function(input, output, session) {
  
  x= list("Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax")
  measure= c("relative", "relative", "total", "relative", "relative", "total")
  text= c("+60", "+80", "", "-40", "-20", "Total")
  y= c(60, 80, 0, -40, -20, 0)
  data = data.frame(x=factor(x,levels=x),measure,text,y)
  
  output$Waterfall <- renderPlotly({ plot_ly(
    data, name = "20", type = "waterfall", measure = ~measure,
    x = ~x, textposition = "outside", y= ~y, text =~text,
    connector = list(line = list(color= "rgb(63, 63, 63)")))   })
})

shinyApp(ui=ui, server=server)

Аналогичный вопрос: Basi c пример fillPage в Shiny - как это работает?

...