2014-12-19 114 views
3

我正在處理一個Shiny應用程序。其中一部分涉及使用ggplot2生成一個圖。有相當多的變量,所以我希望它能夠非常廣泛地滾動以便可讀。最初我試圖用plotOutput("plot1", width = X)(其中x是某個數字)來調整尺寸,如果我確切知道我的plot1將會是什麼樣子,我可以使其工作。事情是,最終會有過濾器會影響plot1有多大,所以我不能預先定義它。閃亮/ ggplot2中的變量大小

我想要做的是以某種方式告訴R說:「用ggplot2製作一個條形圖,其中條形圖全部爲x個單位,並使圖形儘可能大。」

這裏是server.r產生積代碼:

output$plot1 <- renderPlot({ 
ggplot(data = dat, aes(x = foo)) + geom_bar(stat="bin") 
+facet_grid(~bar, scales = "free_x", space = "free") 

,然後在ui.r我把它像我上面那樣:

plotOutput("plot1", width = X) 

具體發生了什麼事是, 'facet_grid'將劇情分成不同的組,用戶可以選擇決定哪些組/多少組。

我想到的一種可能的解決方法將涉及以某種方式嘗試計算將出現的小節數量,然後提出函數來計算X有多大。在一個常規的R會話中,這將非常容易,但在Shiny中,我需要能夠在server.r中計算一個變量並在ui.r中使用它,並且我對如何實現這一點感到困惑。

編輯:我可能已經找出了一個解決方法,而不是做一個情節,將劇情轉換爲圖像並顯示圖像。現在,我只需要弄清楚如何使圖像成爲全尺寸,而不是將它縮放以適應窗口。任何意見,將不勝感激。

回答

4

我能夠通過使用renderUI來做到這一點。像在server.r以下

output$newUI <- renderUI({ 
    output$plot1 <- renderPlot({ 
    ggplot(data = dat, aes(x = foo)) + geom_bar(stat="bin") 
    +facet_grid(~bar, scales = "free_x", space = "free") 
    }) 
plotOutput(plot1, width = X) 
}) 

(其中X是數據的一些功能),並在ui.r

mainPanel(
    uiOutput("testUI") 
) 

編輯:上面的代碼是一個懶散的努力得到工作沒有真正重現我的完整代碼。下面是更完整的代碼,相關代碼:

在server.ui

output$ui <- renderUI({ 
    ... 
    ##here, I did a query based on parameters passed in from the 
    ##shiny ui, so the data was variable. 
    ##so I do some processing of the data, and then a function on the 
    ##resulting data so I know how much to scale my plot 
    ##(something like nn = nrow(data)) 
    ##call that scaling factor "nn" 
    .... 
    output$plot1 <- renderPlot({ 
     ggplot(...) 
     )} 
    plotOutput("plot1", width = 30*nn, height = 500) ## nn is my scaling factor 
)} 

而且在ui.R

ShinyUI(fluidPage(
    ..., 
    mainPanel(
     uiOutput("ui") 
    ) 
) 
+0

我得到的錯誤:錯誤標記(「div」,列表(...)):找不到對象'plot1'。另外,當你引用ui.R中的變量「testUI」時,你的代碼至少有一個錯誤,並且你在server.R中使用newUI。你能確認你的代碼是正確的嗎?我也嘗試訪問plotOutput代碼上的輸出$ plot1,但後來我得到錯誤:不允許從shinyoutput對象的eading對象。在此先感謝 – Picarus 2015-05-01 04:13:30

+0

是的,我的代碼工作,但它有點屠殺,因爲我剛剛輸入一些骨架代碼,以節省時間,並沒有打擾仔細檢查的東西名稱。我編輯了我的答案,所以你可以看到正確的代碼(無論如何,相關的東西) – goodtimeslim 2015-05-01 05:37:49

+0

謝謝。我猜報價在哪裏... – Picarus 2015-05-01 05:40:06

0

我用圖表不GGPLOT2。

對於那些誰與googleVis縮放問題來到這裏,我想和大家分享的是,而不是設置說width = 200以像素爲單位,你可以用這個詞「自動」它可以擴展很好,並沒有在文檔中明確。從我的其中一個功能片段:

# where plotdt has my data with columns px and py 

plot1 <- gvisBarChart(plotdt, 
         xvar = px, 
         yvar = c(py), 
         options = list(width = "automatic", 
             height = "automatic") 

希望這可以幫助別人。