с тех пор, как пару дней я пытаюсь найти решение для построения, которое появляется неправильно (за пределами ширины окна) в блестящем приложении при использовании функции show/hide sidebar.R/shinyjs: Plot появляется за пределами ширины окна после использования функции show/hide sidebar
Вот пример кода:
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)
Как мы можем видеть в этом примере кода, я хотел бы боковой панели, чтобы появиться, когда пользователь открывает вторую вкладку (боковая панель рухнула, когда input$tabs == 1
). Это работает очень хорошо, за исключением того, когда я нажимаю, чтобы увидеть TAB2, а затем вернуться к tab1 и снова TAB2, сюжет изменяется и ось х разрезают:
Вы переопределяете набор данных, который вы планируете каждый раз, когда вы нажимаете вкладки, потому что вызов 'rnorm()' находится в 'renderPlot'. Разве это не источник вашей проблемы? – ddiez
О, я убираю свой предыдущий комментарий. Я использовал фиксированный набор данных и теперь получил вашу точку (возможно, лучше сделать это в вашем примере, чтобы удалить путаницу, вызванную изменением сюжета). – ddiez
Просто несвязанный комментарий стороны: вы можете определить обе функции js в одном вызове/в одной строке. Вам не нужно называть 'extendShinyjs()' дважды –