seit einigen Tagen Ich versuche, Lösung zu plotten erscheinen falsch (über die Breite der Box) in glänzenden app während Verwendung der Funktion zeigen/ausblenden Sidebar.R/shinyjs: Plot erscheint über die Box-Breite nach der Verwendung der Funktion zeigen/verbergen Sidebar
Es folgt ein Beispielcode:
library(shiny)
library(shinydashboard)
library(ggplot2)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
useShinyjs(),
extendShinyjs(text = 'shinyjs.hideSidebar = function(params) { $("body").addClass("sidebar-collapse") }'),
extendShinyjs(text='shinyjs.showSidebar = function(params) { $("body").removeClass("sidebar-collapse") }'),
fluidRow(tabsetPanel(id='tabs',
tabPanel(value=1,title="Plot1",
fluidRow(
column(12,
plotOutput('plot1', height=800)))),
tabPanel(value=2, title="Plot2",
fluidRow(
column(12,
plotOutput('plot2', height=800))))
)
)))
)
)
server <- function(input, output, session) {
output$plot1 <- renderPlot({
out <- ggplot(data.frame(X1=rnorm(1000)),aes(X1))+
geom_density(fill='light blue')+
theme_minimal()
print(out)
})
output$plot2 <- renderPlot({
out <- ggplot(data.frame(X1=rnorm(1000)),aes(X1))+
geom_density(fill='light blue')+
theme_minimal()
print(out)
})
observe({
if (input$tabs == 1) {
js$hideSidebar()
}
else {
js$showSidebar()
}
})
}
shinyApp(ui, server)
Wie wir in diesem Beispielcode sehen können, ich die Sidebar möchte angezeigt werden, wenn der Benutzer die zweite Registerkarte öffnet (Sidebar brach zusammen, als input$tabs == 1
). Es funktioniert ziemlich gut, außer wenn ich drücke tab2 zu sehen, dann zu tab1 zurückgehen und wieder Tab2, das Grundstück der Größe verändert und die x-Achse geschnitten:
Sie definieren den Datensatz, den Sie plotten, jedes Mal neu, wenn Sie auf die Registerkarten klicken, weil der Aufruf von 'rnorm()' in 'renderPlot' steht. Ist das nicht die Ursache Ihres Problems? – ddiez
Oh, ich ziehe meinen vorherigen Kommentar zurück. Ich habe einen festen Datensatz verwendet und jetzt habe ich Ihren Standpunkt verstanden (in Ihrem Beispiel könnte es besser sein, die Verwirrung zu beseitigen, die durch die Änderung des Diagramms verursacht wurde). – ddiez
Nur ein nicht verwandter Seitenkommentar: Sie können beide js-Funktionen in einem Aufruf/in einer Zeichenfolge definieren. Sie müssen 'extendShinyjs()' nicht zweimal aufrufen –