Блестящий сервер перерисовывает диаграмму Google при изменении размера браузера

У меня есть сервер Shiny, использующий Shiny Dashboard. У меня есть диаграмма Google (AnnotationChart), размер которой не изменяется автоматически при изменении размера окна браузера. Я могу прослушивать событие изменения размера и реагировать на него (в javascript), но я не знаю, как заставить объект диаграммы перерисовываться с использованием принадлежащих ему данных и параметров - я просто хочу, чтобы он перерисовывался на 90% ширина/высота его контейнера.

Мне кажется, это должно быть проще, чем мне кажется. Если я изменю размер окна браузера, а затем изменю реактивный элемент (например, изменю элемент управления вводом), Shiny перерисует диаграмму, а также все, что должно быть перерисовано, с новой правильной шириной (т.е. изменю ее размер до 90% его контейнера) . Такое ощущение, что если бы я мог запустить это событие перерисовки (что бы это ни было) из javascript или смоделировать изменение элемента ввода, это могло бы привести меня куда-нибудь.

По сути вопрос можно свести к следующему:

Как в Shiny принудительно перерисовать диаграммы, размер которых не изменяется автоматически при изменении размера в браузере?

Ваше здоровье,

Энди.


person Andy Crellin    schedule 16.07.2015    source источник


Ответы (1)


У меня была и я решил эту проблему с помощью пакета googleVis R, я предполагаю, что вы можете использовать тот же метод, что и я, хотя я точно не уверен, как все, что у вас есть, сочетается друг с другом, поскольку вы больше на стороне 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))

})

Надеюсь, это поможет?

person Chris Beeley    schedule 05.09.2015