在ggplot2中,元素的大小是单独指定的.当图形的大小发生变化时,元素(例如图例)不会改变.当输出ggplot2数字的大小随浏览器窗口而变化时,这可能是Shiny中的问题.下面是虚拟Shiny应用程序的代码和不同浏览器窗口大小的两个输出数字.较小的数字是丑陋的,因为其传奇的一部分已被切断.
有没有一种方法可以直接在ggplot2中使用图形大小缩放图例大小,而无需将图形预先保存为Shiny应用程序的图像文件?
library(shiny) library(ggplot2) ui <- fluidPage( br(), br(), br(), plotOutput("test", height = "auto") ) server <- function(input, output, session) { output$test <- renderPlot( height = function() { 0.8 * session$clientData$output_test_width }, expr = { aaa <- ggplot(mtcars, aes(wt, mpg, color = cyl)) + geom_point() + theme(legend.position = c(0.9, 0.9)) print(aaa) } ) } shinyApp(ui, server)
较大的浏览器窗口中的数字看起来很好:
但是在小浏览器窗口中,图例顶部没有显示:
这是一种锚定图例顶部的方法,使其不会从绘图区域的顶部运行.你只需添加legend.justification(0.5, 1)
到ggplot theme
.第一个值以图例的x位置为中心.第二个值"顶部证明"图例的y位置.(您可以通过更改0.5至1的第一个值,这将让传说从流失图的右边缘右对齐的传说,如果这是一个问题.)这不能解决相对大小问题,但完整的图例将始终显示在同一位置.
server <- function(input, output, session) { output$test <- renderPlot( height = function() { 0.8 * session$clientData$output_test_width }, expr = { aaa <- ggplot(mtcars, aes(wt, mpg, color = cyl)) + geom_point() + theme(legend.position = c(0.9, 0.98), legend.justification=c(0.5, 1)) print(aaa) } ) }
下面我在"小"和"大"浏览器窗口中插入了这些图像.