使用Rcharts的百分比宽度

时间:2015-01-25 07:57:29

标签: rcharts

我想知道如何使用%而不是px设置rChart的宽度。我在源代码中注意到它默认为像素。我试图在一个闪亮的应用程序中使用它,并用图表修复似乎是一个问题,因为他们不会与其余的用户界面进行扩展。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

这应该被视为黑客攻击,因为rCharts或大多数库都没有内置响应行为。但是,一个更改是使用此行为定义您自己的renderChart函数。如果你在服务器中定义一些闪亮的东西,这样的东西可能会起作用。

renderChart_pct <- function(expr, env = parent.frame(), quoted = FALSE) {
  func <- shiny::exprToFunction(expr, env, quoted)
  function() {
    rChart_ <- func()
    cht_style <- sprintf("<style>.rChart {width: %s; height: %s} </style>",
                         #### change these here to desired %
                         "100%", "100%")
    cht <- paste(capture.output(rChart_$print()), collapse = '\n')
    HTML(paste(c(cht_style, cht), collapse = '\n'))
  }
}

然后使用renderChart_pct代替renderChart2。您可能会注意到结果不会真正响应。总而言之,这里将是dPlot的示例。

  library(shiny)
  library(rCharts)

  renderChart_pct <- function(expr, env = parent.frame(), quoted = FALSE) {
    func <- shiny::exprToFunction(expr, env, quoted)
    function() {
      rChart_ <- func()
      cht_style <- sprintf("<style>.rChart {width: %s; height: %s} </style>",
                           "100%", "100%")
      cht <- paste(capture.output(rChart_$print()), collapse = '\n')
      HTML(paste(c(cht_style, cht), collapse = '\n'))
    }
  }

  ui = shinyUI(fluidPage(
    fluidRow(
      column(4,
        h1("Filler Header") 
      )
      ,column(8,
        div (
          showOutput("myChart", "dimple")
        )
      )
    )
  ))

  server = function(input,output){
    output$myChart <- renderChart_pct({
      d = dPlot(
        x~x
        , data = data.frame(x=1:10)
        , type = "line"
        , height = 500
        , width = NULL
      )
    })
  }

  runApp( list(ui=ui,server=server))