R Shiny rCharts Morris - rChart не отображается (при определенных обстоятельствах)
Я столкнулся с проблемой при использовании rCharts
в моем Shiny
приложение. Я генерирую динамически 1-3 tabPanels
(в зависимости от выбора пользователя) и в каждом из них отображается один сюжет. Сюжет может быть двух типов: простой (с графической библиотекой) или rCharts (с библиотекой Морриса). Целый tabsetPanel
предоставляется в рамках uiOutput
компонент, каждый раз, когда пользователь меняет свой ввод. Тип ui output
(plotOutput
для простого сюжета или showOutput
для rCharts) определяется, когда tabPanel
рендерится, поэтому сюжет имеет надлежащую среду.
И проблема: простые графики (с графикой, ggplot2 и т. Д.) Работают нормально - они отображаются правильно в tabPanel
, Однако, когда я работаю с приложением и у меня отображается 2 или 3 rCharts, бывает, что один график не отображается - почти совсем (см. Изображения ниже). Конечно, такая проблема не возникает на простых графиках.
Я пытался зафиксировать размер вывода, гибкий размер, но проблема все еще существует. У меня есть варианты R и библиотеки следующим образом:
> R.Version()$version.string
[1] "R version 3.0.1 (2013-05-16)"
> packageVersion("Shiny")
[1] ‘0.7.0’
> packageVersion("rCharts")
[1] ‘0.3.51’
Большое спасибо за любые предложения.
rCharts работает нормально:
rCharts FAIL будет отображаться нормально:
РЕДАКТИРОВАТЬ: мой код ниже:
UI
library(shiny)
library(Epi)
shinyUI(pageWithSidebar(
headerPanel("Header"),
sidebarPanel(
checkboxInput(inputId = "checkboxInputx", label = "function: x", value = TRUE),
checkboxInput(inputId = "checkboxInputxpower2", label = "function: x^2", value = FALSE),
checkboxInput(inputId = "checkboxInput2x", label = "function: 2x", value = FALSE),
actionButton("gobutton","GO!")
),
mainPanel(
radioButtons("plottypechoice", "Choose plot type", c("simple", "rCharts")),
uiOutput("plotpanelcontent")
)
))
SERVER
library(shiny)
library(rCharts)
library(Epi)
library(reshape2)
# build data frame
x <- 1:100
df <- data.frame(x, x^2, 2*x)
names(df) <- c("x", "xpower2", "2productx")
shinyServer(function(input, output) {
# generate tabsetPanel with tabPlots with plot of selected type
output$plotpanelcontent <- renderUI({
if(input$gobutton != 0){
# collect tab names
tab.names <- vector()
if(input$checkboxInputx) tab.names <- c(tab.names, "x")
if(input$checkboxInputxpower2) tab.names <- c(tab.names, "xpower2")
if(input$checkboxInput2x) tab.names <- c(tab.names, "2productx")
print(tab.names)
# render tabs
tabs <- lapply(tab.names, function(tab.name){
# define tabPanel content depending on plot type selection
if(input$plottypechoice == "simple")
tab <- tabPanel(tab.name, plotOutput(paste0("simpleplot", tab.name)))
else
tab <- tabPanel(tab.name, showOutput(paste0("rchartplot", tab.name), "morris"))
return(tab)
})
return(do.call(tabsetPanel, tabs))
}
})
# Render simple plots
output$simpleplotx <- renderPlot({
print(plot(df[,1], df[,1]))
plot(df[,1], df[,1])
})
output$simpleplotxpower2 <- renderPlot({
print(plot(df[,1], df[,2]))
plot(df[,1], df[,2])
})
output$simpleplot2productx <- renderPlot({
print(plot(df[,1], df[,3]))
plot(df[,1], df[,3])
})
# Render rCharts
output$rchartplotx <- renderChart({
plot <- mPlot(x="x", y="x", type = "Line", data = df)
plot$set(dom = "rchartplotx")
return(plot)
})
output$rchartplotxpower2 <- renderChart({
plot <- mPlot(x="x", y="xpower2", type = "Line", data = df)
plot$set(dom = "rchartplotxpower2")
return(plot)
})
output$rchartplot2productx <- renderChart({
plot <- mPlot(x="x", y="2productx", type = "Line", data = df)
plot$set(dom = "rchartplot2productx")
return(plot)
})
})
ОБНОВИТЬ:
Я попросил Олли Смит, автора библиотеки morris.js, предложить решение, и я получил следующий ответ:
Моррис не может правильно рисовать диаграммы, когда они не отображаются на экране. При использовании Morris в приложениях с вкладками необходимо перерисовывать активную диаграмму при каждом изменении выбора вкладки. На объектах диаграммы есть метод redraw(), который возвращает каждый из конструкторов Morris.Line/Bar/Donut, который вы можете использовать для этого. К сожалению, в настоящее время он недокументирован, но теперь он является стабильной частью API, поэтому его можно безопасно использовать.
ОБНОВЛЕНИЕ 2.:
Я последовал предложениям Рамната и обновил оба Shiny
а также rCharts
версия библиотеки:
> packageVersion("Shiny")
[1] ‘0.8.0’
> packageVersion("rCharts")
[1] ‘0.3.53’
и запустить код сразу после перезапуска сеанса R. К сожалению, графики, похоже, ведут себя еще более странно. После выполнения действий в следующем порядке:
установить: "функция: х", "rCharts", GO [OK],
добавьте: "function: x^2" [см. изображение "not_ok_1", прикрепленное ниже в сообщении],
добавить: "function: 2x" [см. изображение "not_ok_2", прикрепленное ниже в сообщении].
Я получил сюжетные визуализации следующим образом:
Хорошо
изображение not_ok_1
изображение not_ok_2