2017-09-10 3 views
3

多くのタブを使用した光沢のあるアプリ(navbarPageを使用)があり、選択されているタブに関係なくサイドバーメニューを追加したいと思います。サイドバーの入力値は、すべてのタブの内容に影響します。 さらに、サイドバーメニューのようにサイドバーメニューを非表示にすることも可能です。トップナビゲーション(navbarPage)とサイドバーメニュー(sidebarMenu)を光沢のある方法で結合する方法

は、私は2つの方法を参照してください。

(A)shinydashboardを使用し、何とかトップナビゲーションバーや

を追加

(B)navbarPage使って何とか非表示にすることができますサイドバーのメニューを追加します。ナビゲーションバーのメニューは、メニューの一部ではないタブセットがあるので、醜いです

library("shiny") 
library("shinydashboard") 

cases <- list(A=seq(50,500, length.out=10), B=seq(1000,10000, length.out=10)) 

ui <- dashboardPage(
    dashboardHeader(title = "dash w/ navbarMenu"), 
    dashboardSidebar(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE), numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1)), 
    dashboardBody(
    tabsetPanel(
     tabPanel(h4("Perspective 1"), 
       tabsetPanel(
       tabPanel("Subtab 1.1", plotOutput("plot11")), 
       tabPanel("Subtab 1.2") 
       )), 
     tabPanel(h4("Perspective 2"), 
       tabsetPanel(
       tabPanel("Subtab 2.1"), 
       tabPanel("Subtab 2.2") 
       )) 
    ) 
) 
) 

server <- function(input, output) { 
    output$plot11 <- renderPlot({ 
    hist(rnorm(cases[[input$case]][input$num])) 
    }) 
} 

shinyApp(ui, server) 

:shinydashboard使用

(A)、私が欲しいものに近いが、この(簡体MWE)です。 dashboard_w_navbar

postに基づいて、トップビューに「パースペクティブ1」と「パースペクティブ2」のタブを含めることはできないと思うので、shinydashboardを使用するのは実現不可能です。

(B)navbarPageを使用して、私はnavlistPanel()を使用してみましたが、私は

に成功しなかった

(1)それはすなわち、sidebarMenuのように振る舞うページの左側に見える全体的なこと作ります(2)hide機能を追加する。

library("shiny") 

cases <- list(A=seq(50,500, length.out=10), 
       B=seq(1000,10000, length.out=10)) 

ui <- navbarPage(title = "nav w/ sidebarMenu", 
        tabPanel(h4("Perspective 1"), 
          tabsetPanel(
           tabPanel("Subtab 1.1", 
             plotOutput("plot11")), 
           tabPanel("Subtab 1.2") 
          )), 
        tabPanel(h4("Perspective 2"), 
          tabsetPanel(
           tabPanel("Subtab 2.1"), 
           tabPanel("Subtab 2.2") 
          )), 

       navlistPanel(widths = c(2, 2), "SidebarMenu", 
           tabPanel(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE)), 
           tabPanel(numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1)) 
       ) 
) 


server <- function(input, output) { 
    output$plot11 <- renderPlot({ 
    hist(rnorm(cases[[input$case]][input$num])) 
    }) 
} 

shinyApp(ui, server) 

繰り返しますが、私が欲しいものである:ここに私の試みである私が知っているnav_w_sidebar

は、flexDashboardあります。これは3つの理由で問題が解決しない:それはコラムではなく、実際のサイドバーメニューであるとして

(1)私は、サイドバーのメニューを非表示にすることはないと思う、

を(2)それは私のアプリで必要な反応しない、

(3)私はデータテーブルが動作しないと思う、私も必要です。

さらに、コードをRmarkdown構文に変更する必要はありません。

私のアプリはすでにnavbarPageを使って構築されているので、navbarPageを使用してサイドバーメニューを追加することをお勧めします。

答えて

1

あなたはsidebarLayoutを使用して、このような何かを行うことができます:別のオプションはfluidRow機能を使用することになり enter image description here

ui <- fluidPage(sidebarLayout(
    sidebarPanel(navlistPanel(
    widths = c(12, 12), "SidebarMenu", 
    tabPanel(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE)), 
    tabPanel(numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1)) 
)), 
     mainPanel(navbarPage(title = "nav w/ sidebarMenu", 

          tabPanel(h4("Perspective 1"), 
            tabsetPanel(
             tabPanel("Subtab 1.1", 
               plotOutput("plot11")), 
             tabPanel("Subtab 1.2") 
            )), 
          tabPanel(h4("Perspective 2"), 
            tabsetPanel(
             tabPanel("Subtab 2.1"), 
             tabPanel("Subtab 2.2") 
            ))) 

    ) 
    )) 

あなたはこのような何かを得ます。このような何か:

ui <- fluidPage(
    fluidRow(
     column(3, navlistPanel(
     widths = c(12, 12), "SidebarMenu", 
     tabPanel(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE)), 
     tabPanel(numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1)) 
    )), 
     column(9, navbarPage(title = "nav w/ sidebarMenu", 

          tabPanel(h4("Perspective 1"), 
             tabsetPanel(
             tabPanel("Subtab 1.1", 
               plotOutput("plot11")), 
             tabPanel("Subtab 1.2") 
            )), 
          tabPanel(h4("Perspective 2"), 
             tabsetPanel(
             tabPanel("Subtab 2.1"), 
             tabPanel("Subtab 2.2") 
            )))) 


    ) 
    ) 

は、これを取得するには、次の enter image description here

はそれが役に立てば幸い!

+0

ありがとうSBista。サイドバーメニューを折りたたみ可能にすることは可能ですか? – jmjr

+0

'shinyjs'パッケージから' hide'を使うことができます。 – SBista

+0

[this](https://stackoverflow.com/a/46889284/5894457)の回答を参照することができます。 – SBista

関連する問題