shinyでビルドおよびデプロイされたvisNetworkグラフィックの.pngをエンドユーザがエクスポートできるようにしたいと考えています。私はrenderVisNetwork
コードの最後にvisExport
行を使ってこれを行うことができますが、出力に生成されるボタンの外観が気に入らず、ボタン自体がエクスポートされた.pngに含まれます.png自体の品質はそれほど素晴らしいものではありません。 UIでdownloadButton
によって生成されたボタンの外観が気に入っていますが、サーバ側でdownloadHandler
と間違っています。ブラウザでは、ダウンロードボタンをクリックしてダウンロードダイアログを開き、ファイルを保存できますが、ファイルは空白です(ファイルサイズは318バイトです)。 .pdfとして試してもうまくいきません。ここに私のコードは次のとおりです。shiny(R)のdownloadHandlerを使用してvisNetworkをpngにエクスポートすると、空のファイルが返される
ui.R:
downloadButton('ConDL', label='Download png')
server.R:
# Create network
ConNet <- function(){
visNetwork(Nodes(), Edges()) %>%
#all the other stuff to create the network which works fine
}
# Draw visualization - works fine
output$ConNet <- renderVisNetwork({
ConNet()
})
# Download png of visualization - no errors displayed in browser or
# console when testing, but exports blank png
output$ConDL <- downloadHandler(
filename="Con.png",
content= function(file) {
png(file)
ConNet()
dev.off()
}
)
私が代わりに反応性の機能を持つオブジェクトを生成についてはこちらのアドバイスに従ってきました: Downloading png from Shiny (R)。前述のConNetに反応する反応を関数に変換することも効果がありませんでした。プレビューペインを実行するのではなく、ブラウザ(Firefox)でアプリを開いています。コンテンツセクションのprint(ConNet())
を試しても役に立たないので、私は何が欠けているのか分かりません。
ボーナスネットワークを作成したときに生成されるナビゲーションボタンを除外する.pngを得ることができれば、それらはインタラクティブな部分には便利ですが、静的なグラフィックを乱雑にします。
ええ、私はそのリンクにしばらく前に遭遇し、最終的にその解決策に落ち着いた。エクスポートされたグラフィックは実際にはるかに高品質であり、インタラクティブバージョンでは不要なタイトルを追加するようにコードを変更することはできますが、ダウンロードには便利で、ダウンロードバージョンでは不要なナビゲーションアイコンを削除します。唯一の欠点は、.png自体に小さな "Export as png"ボタンがまだ残っていることですが、他のソフトウェアでは簡単に切り抜かれてしまいます。 – bcarothers
私は高品質のネットワークをエクスポートするための非常に簡単なソリューションを見つけました。ネットワークをhtmlページに保存すると、このファイルを開くことができます。その後、 "右クリック"と "画像を保存..."。驚くべきことに、解決策はvisExport O_Oよりも優れているかもしれません。 –
ハ!この^^^^は本当の答えです。ヘック、私はhtmlに最初に保存する必要はありません - それだけでなく、作品を実行しているときにアプリ自体を右クリックし、すべての不要なものをすべて一歩で削除します。エンドユーザーに画像をダウンロードさせるために右クリックするように指示するUIの1行のコードは、サーバー側で60行程度以上を確認してすべてを設定します。ありがとう! – bcarothers