2017-08-11 11 views
1

私は光沢のある画像をプロットし、画像を.pngファイルとして保存するための保存ボタンを作成しました。私は私のラップトップ画面(を1366x768解像度)に輝いてアプリで画像を表示するシャイニープロットのpngイメージを保存して、画面上の寸法と一致するようにするにはどうすればいいですか?

server <- function(input, output) { 

    output$plot <- renderPlot({ 
    plot(1:500,rep(1:5,100)) 
    }) 

    plotInput <- function(){ 
    plot(1:500,rep(1:5,100)) 
    } 

    output$savePlot <- downloadHandler(
    filename = "file.png", 
    content = function(file) { 
     png(file) 
     plotInput() 
     dev.off() 
    } 
) 
} 

、プロットを伸ばしなる(すなわち、それが幅よりも長いです)。 [注:これは私が望むものです]。

  • 注:fluidRowを使用していますので、画像は表示する画面によってサイズが変わります。

私がプロットを保存すると、出力ファイルはアプリケーション自体に表示されたときのように、もはや横長ではなく、むしろ正方形として保存されます。

ここで、png()機能では、width,height、およびunits引数を使用して出力イメージのサイズを変更できます。

しかし、シャイニーのアプリで開いている画像のサイズはわかりません。

だから私の質問:

それが画面上で見ないときと自動的に同じ「寸法」を有するとシャイニーアプリで画像を保存する方法はありますか?

注:新しいモニタやデバイスにアプリケーションを移動すると、グラフの形状や大きさが変化するので、画像の現在のサイズを積極的に判断する方法を検討しています。私は理想的なソリューションのように自動的に決定するだろう、

enter image description here


再び:ここ


は私のプロットは、私のノートパソコンの画面上に光沢のあるアプリに 次のようになりますスクリーン上に表示されている現在のプロットの寸法を保存したpng出力イメージに適用します。

答えて

2

は、あなたのUIに次のJavaScriptを追加します。

tags$script("$(document).on('shiny:connected', function(event) { 
var myWidth = $(window).width(); 
Shiny.onInputChange('shiny_width',myWidth) 

});"), 

    tags$script("$(document).on('shiny:connected', function(event) { 
var myHeight = $(window).height(); 
Shiny.onInputChange('shiny_height',myHeight) 

});") 

を次に、以下のようにあなたのdownloadHandlerコードを変更:素晴らしい

output$savePlot <- downloadHandler(
    filename = "file.png", 
    content = function(file) { 
     png(file, 
      width = input$shiny_width, 
      height = input$shiny_height) 
     plotInput() 
     dev.off() 
    } 
) 
+0

を!これはすごくうまくいった!ありがとうございました! – theforestecologist

+0

これは非常に便利でした!ありがとう@kostr – infominer

関連する問題