2015-01-25 5 views
2

Мне было интересно, как установить ширину rChart, используя%, в отличие от px. Я заметил в исходном коде, что он по умолчанию имеет пиксели. Я пытаюсь использовать его в блестящем приложении, и исправление с помощью диаграмм кажется проблемой, поскольку они не масштабируются с остальной частью пользовательского интерфейса. Есть ли способ обойти это?Использование процента ширины для Rcharts

ответ

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)) 
+0

отличное решение и кажется, что оно работает для части mot. Я использую nvd3 и 'nplot()' для создания моей диаграммы, и по какой-то причине на экране появляется только половина диаграммы. Есть предположения? – Dan

Смежные вопросы