我有一个使用Shiny Dashboard的Shiny服务器。我有一个Google图表(AnnotationChart),它不会在浏览器窗口调整大小时自动调整大小。我可以听取调整大小事件并对它做出反应(在javascript中),但我不知道如何使用属于它的数据和选项重绘图表对象 - 我只是想让它重绘为90容器宽度/高度的百分比。
我认为应该比我找到它更简单。如果我调整浏览器窗口的大小然后更改一个被动元素(比如改变一个输入控件),Shiny将重新绘制图表,以及应该重新绘制的所有内容,以新的正确宽度(即将其大小调整为其容器的90%) 。感觉好像我可以从javascript中触发重绘事件(无论是什么),或者模拟对输入元素的更改,这可能会让我感到某种程度。
基本上,问题可以归结为:
在Shiny中,如何强制重新绘制不会在浏览器调整大小时自动调整大小的图表?
干杯,
安迪。
答案 0 :(得分:0)
我已经使用googleVis R软件包并解决了这个问题,我猜你可以使用与我相同的方法,虽然我不确定你所拥有的一切是如何组合在一起的,因为你和&# #39;更多关于JavaScript方面。
在任何R函数中,您可以使用session $ clientData变量在浏览器窗口中建立对图形状态的依赖关系。所以在我的情况下,我使用了renderGvis,所以我只是在函数内调用session $ clientData $ output_trend_width(这是一个不同的图,但显然它们都会同时改变),所以每当它改变时,情节就是以正确的尺寸重新绘制。在我的情况下,我只是对宽度感到困扰,但如果在你的情况下这很重要,你显然也可以打电话给身高。
output$gauge <- renderGvis({
# dependence on size of plots to detect a resize
session$clientData$output_trend_width
df <- data.frame(Label = "Bounce %", Value = 25)
gvisGauge(df,
options = list(min = 0, max = 100, greenFrom = 0,
greenTo = 50, yellowFrom = 50, yellowTo = 70,
redFrom = 70, redTo = 100))
})
希望有帮助吗?