rCharts с Highcharts как блестящее приложение
У меня блестящее приложение, состоящее из трех файлов. server.R, ui.R и файл для запуска приложения с
require(shiny)
require(rCharts)
runApp("shinyApp")
Приложение запускается, но сюжет не виден. Он работает с обычным r-сюжетом и с полихартами, но после долгих попыток у меня все еще нет успеха с rCharts (который включает в себя rHighcharts).
Это файлы последней попытки:
server.R:
library(rCharts)
shinyServer(function(input, output) {
output$myChart <- renderChart({
h1 <- Highcharts$new()
h1$chart(type = "spline")
h1$series(data = c(1, 3, 2, 4, 5), dashStyle = "longdash")
h1$series(data = c(NA, 4, 1, 3, 4), dashStyle = "shortdot")
h1$legend(symbolWidth = 80)
return(h1)
})
})
ui.R:
require(rCharts)
shinyUI(pageWithSidebar(
headerPanel("rCharts: Highcharts"),
sidebarPanel(
selectInput(inputId = "x",
label = "Choose X",
choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
selected = "SepalLength")
),
mainPanel(showOutput("myChart", "Highcharts")
)
))
Я предполагаю, что второй аргумент "showOutput" может быть неправильным, но я ничего не нашел.
2 ответа
Есть два способа заставить это работать. Первый способ - добавить h1$set(dom = "myChart")
в вашем server.R
, Это необходимо для того, чтобы оба server.R
а также ui.R
общаемся о правильном графике. Альтернатива заключается в использовании renderChart2
, который находится в dev
филиал rCharts
модернизированная версия renderChart
и в итоге заменит его. Я прилагаю весь код для всеобщего блага.
require(rCharts)
require(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel("rCharts: Highcharts"),
sidebarPanel(selectInput(
inputId = "x",
label = "Choose X",
choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
selected = "SepalLength"
)),
mainPanel(showOutput("myChart", "Highcharts"))
),
server = function(input, output){
output$myChart <- renderChart2({
h1 <- Highcharts$new()
h1$chart(type = "spline")
h1$series(data = c(1, 3, 2, 4, 5), dashStyle = "longdash")
h1$series(data = c(NA, 4, 1, 3, 4), dashStyle = "shortdot")
h1$legend(symbolWidth = 80)
return(h1)
})
}
))
Скорее всего это связано с тем, что rcharts
является javascript
основанные на сильной несовместимости между R
имена переменных и javascript
допустимые имена переменных. В частности, что касается точек .
в именах.
Попробуйте запустить следующую функцию на data.frame
имена и любые character
колонки:
noDot <- function(x)
gsub("\\.", "_", gsub("^\\.", "", x) )
то есть:
names(df) <- noDot(names(df))
# and
char.cols <- sapply(df, function(x) any(is(x)=="character"))
df[, char.cols] <- sapply(df[, char.cols], noDot)
# note that this has not been tested