【问题标题】:How can I display my plot without toolbars, in Shiny?如何在 Shiny 中显示没有工具栏的绘图?
【发布时间】:2015-07-22 15:54:35
【问题描述】:

这个问题是this问题的延伸。

我正在 Shiny 中绘制一个相当大的 gglot。

使用renderPlot(width = 1500, height = 1000, ...我可以显示整个情节;但是,我现在右侧有一个滚动条。我想在fluidRow中扩展列的高度,而不是有这个滚动条。

据我了解,Shiny(又名引导程序)应动态调整流体行的高度,以适应绘图的大小。为什么我的可视区域这么小?滚动条很好,但我希望整个情节都可见。

UI.R

source("helper.R")    
shinyUI(fluidPage(theme='test.css',

    fluidRow(
    column(2, 
           fluidRow(
             h3("Select Customer:"),
                    wellPanel(class="info", numericInput(inputId="num", label="Select ID:", value=NaN),
                              if(show_age_slider=='Yes'){textOutput("")},
                              if(show_edu_slider=='Yes'){textOutput("")},
                              if(show_gender_buttons=='Yes'){textOutput("")}
                    ))),

    #do.call will call the navbarPage function with the arguments in the tabs list
    shinyUI(fluidRow(
      column(12,
             "", 
             do.call(navbarPage,tabs)
    ))))))

SERVER.R

library("shiny")
library("ggplot2")

DF_for_plotting <- structure(list(col1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), col2 = c(100, 
                                                                                   100, 61.9433678425096, 10.7823906941804, 4.18175346165306, 3.24251454697229, 
                                                                                   6.68573373055455, 14.945119260922, 18.9296271776082, 11.0742379220636
), col3 = c(100, 100, 100, 12.8418470680653, 5.31239161296286, 
            4.42025167250118, 10.699998838647, 27.5067118056336, 20.6360723198699, 
            13.1476876837599), col4 = c(100, 100, 100, 100, 100, 100, 100, 
                                        100, 100, 100)), .Names = c("col1", "col2", "col3", "col4"), row.names = c("one", 
                                                                                                                   "two", "three", "four", "five", "six", "seven", "eight", "nine", 
                                                                                                                   "ten"), class = "data.frame")


hex=c("#CC0000", "#90BD31", "#178CCB")
textsize=c(8)

############## shiny server starts here: #######################################################################
shinyServer(function(input, output) {  

# begin the observe() block
observe(


lapply(seq(1:number_of_tabs),function(i) output[[paste0("plot",i)]] <- renderPlot(width = 1500,
                                                                                  height = 1000,{   #<-- lapply will fill up each tab and create one ggplot

  plotindex <<- 0
  list_of_ggplots <<- list() #although we only have one tab, we could easily extend to having multiple tabs
  p <- ggplot()

breaks=c(0, 25, 50, 75, 100, 115, 130)
break_labels=c("0%", "25%", "50%", "75%", "100%")

number_of_variables <- 10

### inner loop
  for (varnum in seq(1:number_of_variables)){ #<-- We need to make all three segments for all three variables for this tab

    p <- p + scale_y_discrete(breaks = seq(10), labels = c("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"))



    p <- p + geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col1[varnum], xend=DF_for_plotting$col2[varnum]-0.001, y=varnum, yend=varnum, colour='impaired'), size=textsize*2.5) +
      geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col2[varnum], xend=DF_for_plotting$col3[varnum]-0.001, y=varnum, yend=varnum, colour='normal'), size=textsize*2.5) +
      geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col3[varnum], xend=DF_for_plotting$col4[varnum]-0.001, y=varnum, yend=varnum, colour='optimal'), size=textsize*2.5)
    p <- p + scale_color_manual(values=c(impaired=hex[1], normal=hex[2], optimal=hex[3], white='#ffffff'), name="Function Key")
#    p <- p + theme(plot.margin=unit(c(0,0,0,0), "cm"))
#    p <- p + theme(panel.margin=unit(c(0,0,0,0), "cm"))

            list_of_ggplots[["to_UI"]] <<- p # this is strange but true; apparently any arbitrary key works for inserting the plot into the list_of_ggplots
}   
      print(list_of_ggplots)  #<-- to send out to UI
})
)


) #<-- end of observe function
}  #<-- end of brace in shinyserver function
)  #<-- end the shinyserver function

helper.R

show_gender_buttons='No'
show_edu_slider='No'
show_age_slider='No'
##############################################
### this part is to create the UI properly ###

#tab_names <- c("", tab_names)
#make a list of all the arguments you want to pass to the navbarPage function
tabs<-list()


#first element will be the title, empty in our case
tabs[[1]]=""

#add all the tabPanels to the list
for (j in 2:(number_of_tabs+1)){
     tabs[[j]]=tabPanel(tab_names[j],plotOutput(paste0("plot",j-1)))}

################################################

【问题讨论】:

  • shinyUI 函数太多?如果去掉它会更好吗?
  • 你可以尝试添加到你的 UI.R: tags$style(type="text/css", ".tab-content { overflow: visible; }"), # 以避免滚动条

标签: html css r twitter-bootstrap-3 shiny


【解决方案1】:

您没有发布您的 theme.css,但问题可能是 css overflow 参数设置为 scroll 用于 div 在您的应用程序的 css 中保存绘图。如果 div 对于其内容来说太小,这会强制滚动条。

plotOutput 的默认 height 设置为 400 像素,因此在您的 renderPlot 中,如果您将高度设置为 1000,如果 div 的溢出设置为滚动,您将获得一个滚动条。

尝试将plotOutput的高度参数设置为1000px或更多例如:

#add all the tabPanels to the list
for (i in 2:(number_of_tabPages+1)){
  tabs[[i]]=tabPanel(paste0("Tab",i-1),plotOutput(paste0("plot",i-1),height="1100px"))

}

应该这样写:

您还可以尝试查找将这个 div 的 overflow 设置为 scroll 的原因。我只是怀疑这一点,因为当代码在没有 theme.css 的情况下运行时,它看起来很好,而无需更改您的代码。

【讨论】:

  • 感谢您的建议。 1 件事:奇怪的是,当我注释掉 theme='test.css' 时,没有任何变化,我的问题仍然存在。我错过了什么吗?再次感谢。
  • 不知道发生了什么,我测试了这个shiny_0.11.1,你在什么版本上运行这个?
  • 我使用的是 shiny_0.10.2.1。也许我应该升级并再试一次
猜你喜欢
  • 2016-02-23
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2014-03-04
  • 2020-12-13
  • 2023-03-14
相关资源
最近更新 更多