2012-12-09 22 views
11

Sadece Shiny ile oynuyor ve onu seviyor. Fakat hangi grafiğin çizileceğine bağlı olarak farklı boyutlarda olmak için reaktifPlot/plotOutput kombinasyonunda grafikler nasıl alabilirim? Bu ilk örnekte R'nin Parlak paketindeki grafiklerin en boy oranını nasıl değiştirebilirim?

, ben "Verim eğrisi" analizini seçilen ve istediğim boy oranını elde var:

enter image description here

Ama bu durumda, bir ısı haritası başka analizini seçerken, öyle şimdi onu çarpıtır "Verim Eğrisi" grafiği ile aynı boyuta (hücreler dikdörtgen değil, kare olmalıdır).

enter image description here

nasıl grafik boyutu seçildi edildiği grafik bağlı olarak değişebilir? Yükseklik parametresini = NA, NULL veya "" koymaya çalıştım ama bunlardan hiç hoşlanmıyor.

Ayrı ayrı fakat aynı uygulamada, üst selectInput ile sidebarPanel içindeki textInputs arasında nasıl boşluk oluşturabilirim? H4 ("") denedim ama çalışmıyor. İşte

benim ui.R: Burada

library(shiny) 

shinyUI(pageWithSidebar(
    headerPanel(h1("SAGB Relative Value Tool")), 
    sidebarPanel(
     h4("Choose analysis:"), 
     selectInput("analysis1", "", 
      choices = c("Yield curve", "Optical asset swap spreads", 
         "Cheap dear box", "Cheap dear charts", "Switch signaliser", 
         "Barbells")), 
     h4(" "), 
     h4("Yield override:"), 
     lapply(bondNames, function(x) 
      textInput(paste(x, "bond"), x, last(sagb$sagb)[x])) 
    ), 
    mainPanel(
     h3(textOutput("AnalysisHeader")), 
     plotOutput("AnalysisOutput", height = "10in")) 
)) 

ve benim server.r olduğunu

library(shiny) 

shinyServer(function(input, output) { 

    output$AnalysisHeader <- reactiveText(function() { 
     input$analysis1 
    }) 


    output$AnalysisOutput <- reactivePlot(function() { 
     switch(input$analysis1, 
      "Yield curve" = wo(whichOut = 1), 
      "Optical asset swap spreads" = wo(whichOut = 2), 
      "Cheap dear box" = wo(whichOut = 3), 
      "Cheap dear charts" = wo(whichOut = 4), 
      "Switch signaliser" = wo(whichOut = 5), 
      "Barbells" = wo(whichOut = 6) 
     ) 

    }) 


}) 
+0

bondNames nedir? – agstudy

+0

bondNames, runApp() öğesini çağıran ve Güney Afrika devlet tahvili ("SAGB") piyasasında 12 aktif tahvilin adlarını içeren programda global bir liste değişkeni. Burada, kenar çubuğu verim geçersiz kılma girişlerini oluşturmak için kullanılır (biraz sloppily olsa da - şimdi sadece numericInput'ı keşfettim ve bir döngü olmayan bir döngü kullanmalıyım ve yapışmam bir sep = "" argümanını içermez). Her neyse soruyla alakalı değil. wo() ve sagb $ sagb veri yapıları, örneğin, içeren kodun bir parçasıdır. –

+0

Soruyu soruyorum (Rstudio'dan gelen kişiler bu özelliğe ne kadar çok kişinin ilgi duyduğunu bilmek isterler!), [Şu anki grafiğim okunamıyor] (http://i.stack.imgur.com/liY3O.png), ama dinamik olarak UI'lere göre parsellerin sayısı değiştiğinde statik olarak ayarlayamıyorum ... – Kevin

cevap

9

((benim öz konuşurken bazen RTFM için iyi bir fikirdir, hem de cf benim

reactivePlot(func, width = "auto", height = "auto", ...) 

width The width of the rendered plot, in pixels; or ’auto’ to use the offsetWidth of 
     the HTML element that is bound to this plot. You can also pass in a function 
     that returns the width in pixels or ’auto’; in the body of the function you may 
     reference reactive values and functions. 
*height* The height of the rendered plot, in pixels; or ’auto’ to use the offsetHeight 
     of the HTML element that is bound to this plot. You can also pass in a function 
     that returns the width in pixels or ’auto’; in the body of the function you may 
     reference reactive values and functions. 
...  Arguments to be passed through to png. These can be used to set the width, 
     height, background color, etc. 

ancak bugüne kadar benile (çalışmayı yapmak için başaramadılar) OP yorumum) ...

Error in switch(units, `in` = res, cm = res/2.54, mm = res/25.4, px = 1) * : 
    non-numeric argument to binary operator 

DÜZENLEME: şimdi çalışıyor, height kesinlikle isteğe units="px" ve res ile, sayısal olarak piksellere units dönüştürmek için bir şey vardır.

EDIT 2: ve Shiny'u [son sürüme] güncellemeyi unutma, karşılaştığım bazı hataları giderir.

DÜZENLEME 3:

getVarHeight <- function() { 
    return(getNumberOfPlots() * 400) 
} 
output$out <- reactivePlot(doPlots, height=getVarHeight) 

Sen getNumberOfPlots arsa için grafiğin sayısını döndürür bu screenshot e parçacığını ilgili olabilir: Burada yükseklik dinamik değiştiğinde bir örnektir.

DÜZENLEME 4: Eğer birkaç resimleri görüntülemek istiyorsanız, içeri height değiştirmelisiniz 'ui.R' de: Bu değer, doğrudan CSS iletilir ve varsayılan değer 400px mesafesindedir. Eğer görüntüleriniz daha büyükse, onlar üst üste gelecektir ve sadece 400 piksel görünecektir ...

plotOutput(outputId = "plot_rain", height="100%")) 
+0

teşekkürler Kevin - Ben aslında RTFM yaptım ve bunu gördüm;) ama ne varsayılan var olan plotOutput işlevine koymuyorum 400 pikselin yüksekliği. –

+0

@Thomas Browne: Cevabı bir örnekle güncelledim – Kevin

+1

Ayrıca 'height =" auto "' işlevini de 'plotOutput' işlevine de aktarabiliyorsunuz, bu da plotOutput'ın içeriğinin" doğal "yüksekliğini kullanmasını sağlamalı. ("ReactivePlot" ve "plotOutput" öğelerinin her ikisi için de "height =" auto "' işlevini kullanmayacağınızdan emin olun: her ikisi de yüksekliği belirlemek için diğerine bağlı olacak ve tahminim 0px ile sona erecek yükseklik.) –

İlgili konular