闪亮/ ggplot2中的可变绘图大小

时间:2014-12-19 03:15:35

标签: r ggplot2 shiny

我正在研究一个闪亮的应用程序。部分内容涉及使用ggplot2生成绘图。有很多变量,所以我希望它能够滚动相当广泛,以便它可读。最初我尝试使用plotOutput("plot1", width = X)调整大小(其中x是某个数字),如果我确切地知道我的plot1将会是什么样子,我可以让它像这样工作。问题是,最终会有过滤器会影响plot1的大小,所以我无法预定义它。

我希望能够以某种方式告诉R说:“使用ggplot2制作一个条形图,其中条形图都是x单位宽,并使图形尽可能大。”< / p>

以下是server.r中生成绘图的代码:

output$plot1 <- renderPlot({
ggplot(data = dat, aes(x = foo)) + geom_bar(stat="bin")
+facet_grid(~bar, scales = "free_x", space = "free")

然后在ui.r我就像我上面所说的那样:

plotOutput("plot1", width = X)

特别是发生了什么'facet_grid'将剧情分成不同的组,用户可以选择决定有哪些/有多少组。

我想到的一种可能的解决方法是以某种方式试图计算将出现的柱数,然后提出一个函数来计算出X的大小。在常规的R会话中,这将非常简单,但在Shiny中,我需要能够在server.r中计算变量并在ui.r中使用它,我对如何做到这一点感到有点困惑。

编辑:我可能已经想出了一个解决方法,而不是做一个情节,将情节投射到图像并显示图像。现在我只需要弄清楚如何使图像全尺寸,而不是使它有光泽的尺寸以适应窗口。对此有任何建议将不胜感激。

2 个答案:

答案 0 :(得分:4)

我能够通过使用renderUI来做到这一点。像server.r

中的以下内容
output$newUI <- renderUI({
   output$plot1 <- renderPlot({
   ggplot(data = dat, aes(x = foo)) + geom_bar(stat="bin")
   +facet_grid(~bar, scales = "free_x", space = "free")
   })
plotOutput(plot1, width = X)
})

(其中X是数据的某些功能)和ui.r

mainPanel(
  uiOutput("testUI")
)

编辑:上面的代码是一项懒惰的工作,无需实际复制我的完整代码即可完成工作。以下是更完整的代码,相关代码:

在server.ui中

output$ui <- renderUI({
    ...
    ##here, I did a query based on parameters passed in from the 
    ##shiny ui, so the data was variable.
    ##so I do some processing of the data, and then a function on the
    ##resulting data so I know how much to scale my plot 
    ##(something like nn = nrow(data))
    ##call that scaling factor "nn"
    ....
    output$plot1 <- renderPlot({
        ggplot(...)
        )}
    plotOutput("plot1", width = 30*nn, height = 500) ## nn is my scaling factor
)}

在ui.R

ShinyUI(fluidPage(
    ...,
    mainPanel(
        uiOutput("ui")
    )
)

答案 1 :(得分:0)

我使用图表而不是ggplot2。

对于那些带有AgeRange缩放问题的人来说,我想分享一下,而不是以像素为单位设置说googleVis,您可以使用“自动”这个词很好地扩展,并在文档中不明确。所以我的一个功能片段是:

width = 200

希望这有助于其他人。