在RStudioshiny的情节的规模和大小
相关,但是一般只讨论分配的绘图空间,而不是如何直接设置绘图的图像大小, 然后将其缩放以填充所需的空间
- shiny的图表空间分配
我正在创build一个shiny的Web应用程序,并希望设置的大小的情节和规模。 我的意思是我正在寻找一种方法来为我的情节设置一个有限的高度/宽度, 然后将设置大小的图像缩放到mainPanel( plotOutput ())
区域。
以此作为示例/ shiny
之外的类似情况。
x <- 1:10 y <- x^2 png("~/Desktop/small.png", width = 600, height = 400) plot(x, y) dev.off() png("~/Desktop/big.png", width = 1200, height = 800) plot(x, y) dev.off()
我无法将图像上传到SO并设置大小,因此我将包含每个使用以下html的浏览器截图:
<img src="file:///home/jwhendy/Desktop/file.png" width = "800px" />
这是我的1600 x 900像素笔记本电脑全宽屏幕截图。
小
大
我想控制图像本身的大小,因为当使用像colour = var
和size = var
这样的选项时, ggplot2
图例非常小。 请注意阅读更大图片的轴标签的难度。 我意识到我可能会陷入由于像素有限而不能很好地缩放图像的情况,但是我认为在遇到这种情况之前,我至less还有一些空间。
有什么build议么? 到目前为止,我尝试过玩下面的游戏,但没有运气:
ui.R
shinyUI(pageWithSidebar( headerPanel("Title"), sidebarPanel(), mainPanel( plotOutput(outputId = "main_plot", width = "100%")) ))
server.R
shinyServer(function(input, output) { x <- 1:10 y <- x^2 output$main_plot <- renderPlot({ plot(x, y) }, height = 400, width = 600 ) } )
看来server.R
指定的height / width选项会覆盖我在server.R
的plotOutput
部分中设置的任何ui.R
。
有没有一种方法来保持小图的大小,以保持可读性,同时仍然填充所需的mainPanel
区域?
不知道这是否完全给你你想要的东西,但这是对我有用的东西。
在Server.R
指定的选项已经生效。 (我只是绘制了两张不同大小的图。)我也采取了@ Manetheran的build议,并将cex和cex.axis作为参数。 他们似乎在工作。
下面是完整的应用程序的代码,再加上一个屏幕截图。
###UI.R shinyUI(pageWithSidebar( headerPanel("Title"), sidebarPanel( sliderInput(inputId = "opt.cex", label = "Point Size (cex)", min = 0, max = 2, step = 0.25, value = 1), sliderInput(inputId = "opt.cexaxis", label = "Axis Text Size (cex.axis)", min = 0, max = 2, step = 0.25, value = 1) ), mainPanel( plotOutput(outputId = "main_plot", width = "100%"), plotOutput(outputId = "main_plot2", width = "100%") ) )) ###Server.R shinyServer(function(input, output) { x <- 1:10 y <- x^2 output$main_plot <- renderPlot({ plot(x, y)}, height = 200, width = 300) output$main_plot2 <- renderPlot({ plot(x, y, cex=input$opt.cex, cex.lab=input$opt.cexaxis) }, height = 400, width = 600 ) } )
更新re。 UI.R
的Width = 100%选项
是的,就我而言,这绝对是有所作为的。 在下面的两行中,new_main_plot和new_main_plot2是相同的,但是它们的大小不同。 所以width
选项会生效。
mainPanel( plotOutput(outputId = "new_main_plot", width = "100%"), plotOutput(outputId = "new_main_plot2", width = "25%") )
希望有所帮助。
@ Ram的答案很适合base
绘图工具。
只是为了扩大其他路人,用ggplot做到这一点:
p <- ggplot(data, aes(x = x, y = y)) + geom_point() p <- p + theme(axis.text = element_text(size = 20)) # tweak size = n until content print(p)
至less有这样的效果,取决于你想要什么。 看到这个问题的基本思路,但请参考当前的ggplot2 0.9.3文档设置文本选项 – 您可以指定轴文本,图例文本,facet_grid条文本等。
自上一个SO问题以来,规范已从opts([option] = theme_text(size = n))
更改为theme([option] = element_text(size = n))
。 它可能会再次改变…所以只需findggplot2
的当前testing/主题/选项页面。
我在@ Ram的跟进中进一步玩了一下,并且认为我明白了ui.R
和server.R
如何交互设置不同的选项并查看Chromium中的Inspect element
。
ui.R设置可以填充的可用绘图区域,server.R定义绘图大小。
-
ui.R:
width = 100%,server.R
:没有选项设置
-
ui.R:
width = 100%,server.R
:width = 800,height = 600
-
ui.R:
width = 50%,server.R
:width = 800,height = 600
-
ui.R:
width = 200%,server.R
:width = 800,height = 600
为了最终回答这个问题,最后一个是我需要看到的。 如果您复制设置,您将看到绘图区域<div>
确实是屏幕宽度的200%,并在浏览器中创build了一个水平滚动条…但图像仍处于固定大小。
但是,您可以生成大于绘图区域的图像(以像素为单位),然后通过ui.R
将其缩小并指定width = n %
选项。
所以…我不能以像素为单位创build较小的图像(相对于整体graphics创build更大的文本大小),然后使其变大以获得更大的文本。 其中一个的确需要创build一个绘图大小(或更大)的绘图区域,并通过plot(或ggplot)命令本身来缩放文本以使其满意。
一个也不能指定,至less在目前,在server.R
宽度%,大概是因为它将高/宽选项传递给png()
命令来生成图像。 你会得到一个错误,试图做到这一点(但它是值得一试)。
我不同意,指定文字大小选项是比我所寻找的更容易的路线,但至less我有一些工作。 我用pdf("file.pdf", width = 8, height = 6)
为LaTeX文档一直做“作弊”的方式,创build我的情节,然后将其缩放,但是我想要将它包含在.tex文件中时。 在我看来,比每个情节的theme(axis.text = element_text(size = x))
要简单得多。