2016-04-19 7 views
1

異なるパラメータ(データフレーム列)に応じて複数のグラフをプロットすると、this exampleに従います。その場合は、行うべきプロットの数が毎日変わることになります。ハイハットプロットの動的数

Highcharterを使用して基本的なプロットではなくJavaScriptチャートを取得するようにコードを変更しましたが、機能しません。

また、2,3,4列のグラフをプロットするためにこのコードに追加する必要があることを知りたいと思いますか?

おかげ

ui.R

fluidPage(
    # Application title 
    titlePanel("Hello World!"), 

    # Show a plot 
    fluidRow(  
    column(width = 6, 
      highchartOutput("hcontainer", height = "400px") 
    ) 
) 
) 

server.R

get_plot_output_list <- function() { 
    plot_output_list <- lapply(1:NCOL(df), FUN = function(i) { 
     plot_output_object <- highchartOutput("hcontainer") 
     plot_output_object <- renderHighchart({ 
     hc <- highchart() %>% 
      hc_add_serie(name = "df name", data = df) 
     return(hc) 
     }) 
    }) 
    do.call(tagList, plot_output_list) # needed to display properly. 
    return(plot_output_list) 
    } 

observe({ 
    output$hcontainer <- renderUI({ get_plot_output_list() }) 
    #output$hcontainer <- renderHighchart({ get_plot_output_list() }) 
    }) 

答えて

1

こんにちはあなたはこのソリューションを試すことができ、それはあなたと同じ機能を使用しませんが、 @jenesaisquoi(見つけたhere)によって1つ、この関数はいくつかのプロットを作成し、 TLY:

# Packages 
library("highcharter") 
library("shiny") 

# data 
df <- data.frame(
    var1 = rnorm(10), 
    var2 = rnorm(10), 
    var3 = rnorm(10), 
    var4 = rnorm(10), 
    var5 = rnorm(10), 
    var6 = rnorm(10), 
    var7 = rnorm(10) 
) 

# Fun by @jenesaisquoi (modified with highchartOutput) 
makePlotContainers <- function(n, ncol=2, prefix="plot", height=100, width="100%", ...) { 
    ## Validate inputs 
    validateCssUnit(width) 
    validateCssUnit(height) 

    ## Construct plotOutputs 
    lst <- lapply(seq.int(n), function(i) 
    highchartOutput(sprintf('%s%g', prefix, i), height=height, width=width)) 

    ## Make columns 
    lst <- lapply(split(lst, (seq.int(n)-1)%/%ncol), function(x) column(12/ncol, x)) 
    do.call(tagList, lst) 
} 

あなたはUIで直接jenesaisquoiの機能@使用、とcolsの数と同じ数の出力を定義するために、サーバーにlapplyを使用することができます。

# App 
ui <- fluidPage(
    # Application title 
    titlePanel("Hello World!"), 

    # Show plots 
    makePlotContainers(n = ncol(df), ncol = 3, prefix = "hcontainer", height = "400px") 
) 

server <- function(input, output) { 
    lapply(
    X = seq_len(ncol(df)), 
    FUN = function(i) { 
     output[[paste0("hcontainer", i)]] <- renderHighchart({ 
     highchart() %>% 
      hc_add_serie(name = paste("df name", i), data = df[[i]]) 
     }) 
    } 
) 
} 
shinyApp(ui = ui, server = server) 
+0

これは動作します。ありがとう –

+0

私の場合、私はui.Rとserver.Rの2つのファイルを持っています。この場合、global.Rを使用して、両方の部分で同じデータセットを共有しています。 http://shiny.rstudio.com/articles/scoping.html –