我正在研究一个闪亮的应用程序。部分内容涉及使用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中使用它,我对如何做到这一点感到有点困惑。
编辑:我可能已经想出了一个解决方法,而不是做一个情节,将情节投射到图像并显示图像。现在我只需要弄清楚如何使图像全尺寸,而不是使它有光泽的尺寸以适应窗口。对此有任何建议将不胜感激。
答案 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)
我使用googlevis图表而不是ggplot2。
对于那些带有AgeRange
缩放问题的人来说,我想分享一下,而不是以像素为单位设置说googleVis
,您可以使用“自动”这个词很好地扩展,并在文档中不明确。所以我的一个功能片段是:
width = 200
希望这有助于其他人。