2016-04-19 20 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),這個函數創建幾個圖並處理佈局correc 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) 
} 

您可以直接在界面中使用@ jenesaisquoi的功能,並在服務器上使用lapply的定義儘可能多的產出爲的cols數量:

# 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。在這種情況下,我已經使用global.R在兩個部分共享相同的數據集。 http://shiny.rstudio.com/articles/scoping.html –