R 如何自动;“大小合适”;你在闪亮吗?

R 如何自动;“大小合适”;你在闪亮吗?,r,ggplot2,shiny,R,Ggplot2,Shiny,我使用输出ggplot2对象的likert库以交互方式显示答案分布。用户可以选择要绘制的问题组(每组有不同数量的问题),以及要分组的问题。这意味着,总的来说,出现的“酒吧”数量变化很大 如果我将“高度”设置保留为“自动”(默认),图形将变得异常拥挤 似乎有两种方法可以调整高度-在ui.R中,我可以调整“视口”的大小,在调用renderPlot时,我可以指定图形的高度(如果它高于视口,则有一个滚动条)。如果我指定一个更宽敞的图,上面的图看起来很棒: 然而,当我回到一个备选方案较少的问题时,这些

我使用输出ggplot2对象的likert库以交互方式显示答案分布。用户可以选择要绘制的问题组(每组有不同数量的问题),以及要分组的问题。这意味着,总的来说,出现的“酒吧”数量变化很大

如果我将“高度”设置保留为“自动”(默认),图形将变得异常拥挤

似乎有两种方法可以调整高度-在ui.R中,我可以调整“视口”的大小,在调用renderPlot时,我可以指定图形的高度(如果它高于视口,则有一个滚动条)。如果我指定一个更宽敞的图,上面的图看起来很棒:

然而,当我回到一个备选方案较少的问题时,这些问题会变得很荒谬:


有没有一种方法可以使条形图具有恒定的宽度,无论有多少条,并且图形可以动态调整大小,而不必根据元素的数量计算特定的高度?

据我目前所知,它们不是默认的方法,可以使用
渲染图({})
“查找”ggplot对象(或任何其他R打印对象)的正确高度“自动”。“正确”的高度有些主观,因此您必须自己手动计算高度。可能有一些软件包试图这样做,但即使存在这样的东西,我认为您更喜欢创建自己的自定义“算法”来找到合适的高度。在许多情况下,这个算法仅仅取决于在你的情节中产生局促感觉的方面分组的数量。简单地做:

output$myPlotOutput <- renderPlot({
  myGGPlotCode
}, height = myHeightAlgorithm())
其中,
session
shinyServer(函数(输入、输出、会话))
中的
session
参数,
output\u width\u name
输出$myPlotOutput
宽度的名称。
output$myPlotOutput
宽度的会话名称为:
output\u myPlotOutput\u width

i、 e.您应该使用
设置\u shining\u plot\u height(会话,“output\u myplot output\u width”)
代替
myHeightAlgorithm()

最后,上面的代码将创建一个方形图(因为我的高度等于宽度)。但是,我建议提取宽度并合并高度算法,以考虑打印输出的宽度。您应该始终使对象对web应用程序的宽度变化作出响应

set_shiny_plot_height_with_respects_to_width <- function(session, output_width_name){
   width <- function() { 
     session$clientData[[output_width_name]] 
   }
   # Do something with the width
   width / 2
}

set_shinny_plot_height_与_appresents_to_width_您是在说R或Rstudio中的图形设备窗口吗?或者你想把这些保存到光盘上?“绘图”实际上没有任何高度,它只是填充渲染到的设备。因此,您需要共享用于实际绘制绘图的代码。您使用的是
renderPlot
还是什么?在Shiny中,我使用的是renderPlot,没有特定高度,或者高度=900。这太棒了,谢谢!如何应对宽度的变化?答:会话$clientData$output\u myPlotOutput\u宽度可以用作反应变量。
set_shiny_plot_height_with_respects_to_width <- function(session, output_width_name){
   width <- function() { 
     session$clientData[[output_width_name]] 
   }
   # Do something with the width
   width / 2
}