11

我有一个由三个文件组成的闪亮应用程序。server.R、ui.R 和启动应用程序的文件

require(shiny)
require(rCharts)
runApp("shinyApp")

应用程序启动,但绘图不可见。它适用于普通的 r-plot 和 polycharts,但在尝试了很多之后,我仍然没有成功使用 rCharts(包括 rHighcharts)。

这是最后一次尝试的文件:

服务器.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”的第二个参数可能是错误的,但我什么也没找到。

4

2 回答 2

17

有两种方法可以让这个工作。第一种方法是添加h1$set(dom = "myChart")您的server.R. 这是必需的,以便双方server.Rui.R在交流正确的图表。另一种方法是使用renderChart2dev分支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)
    })
  }
))
于 2013-10-01T23:34:15.090 回答
2

这很可能是因为rcharts变量名和允许的变量名javascript之间存在很强的不兼容性。特别是关于名称中的点。Rjavascript.

data.frame尝试在名称和任何character列上运行以下函数:

noDot <- function(x)
   gsub("\\.", "_", gsub("^\\.", "", x) )

IE:

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
于 2013-10-01T17:08:20.887 回答