HTML ウィジェット (主に plotly と networkD3) の豊富さと、それらを R のグリッド内のプロットとして配置する可能性を組み合わせて、出版物の pdf グラフィックとしてエクスポートしたいと考えています。ただし、R でいくつかの html ウィジェット オブジェクトを作成し、それらをgridExtra::grid.arrange()で配置しようとすると(以下の最小限の例を参照)、次のエラーが発生します。
Error in gList(list(x = list(links = list(source = c(0, 0), target = c(1, :
only 'grobs' allowed in "gList"
「HTMLウィジェットをグロブまたはプロットに変換する」を検索してグリッドに配置できるようにしましたが、関連する情報は見つかりませんでした。最初にhtmlwidgets::saveWidget()を使用して html ウィジェットを Web サイトとして保存し、次に webshot:: webshot ()を使用してそれを PDF に変換し、ベクター グラフィック エディター (インクスケープ)。ただし、手動での作業にもかかわらず、すべての変換ステップで品質が低下する可能性があります。
おそらく、LaTeX R-Markdown ドキュメントのグラフィックスを表または列で配置し、プロットに合うように用紙の寸法を指定することができます。しかし、どういうわけか、それは理想的な解決策とは思えません。グラフをいくつかの列と行に動的に配置したり、タイトルを追加したりすると、LaTeX/knitr での配置が非常に複雑になります。
すべてを手作業で編む旅に出る前に、いくつかの html ウィジェット プロットを配置して R 内でそれらを pdf にエクスポートするためのより良い方法を知っているかどうかを尋ねたいと思います。
最小限の例
これは、私の問題を再現するための最小限の例です。私の目的は、2 つの異なるプロセスのエネルギー フローを相互に比較するグラフ (networkD3 を使用したサンキー ダイアグラム) であるとしましょう 。
これは私のコードです:
library(networkD3)
library(grid)
library(gridExtra)
## Create simplified Data
dfSankey <- list()
dfSankey$nodes <- data.frame(Name = c("Final Energy","Conversion Losses","Useful Energy"))
#1st process
dfSankey$links1 <- data.frame(Source = c(0,0),Target=c(1,2),Value=c(30,70))
#2nd process
dfSankey$links2 <- data.frame(Source = c(0,0),Target=c(1,2),Value=c(10,60))
## Draw Sankeys
plSankey1 <- sankeyNetwork(Links = dfSankey$links1, Nodes = dfSankey$nodes, Source = 'Source',
Target = 'Target', Value = 'Value', NodeID = 'Name')
plSankey2 <- sankeyNetwork(Links = dfSankey$links2, Nodes = dfSankey$nodes, Source = 'Source',
Target = 'Target', Value = 'Value', NodeID = 'Name')
#Arrange them next to each other
grid.arrange(plSankey1,plSankey2)
これにより、冒頭で説明したエラー メッセージが表示されます。
Windows 7、R-Studio 0.99.903、R バージョン 3.2.3、グリッド 3.2.3、gridExtra 2.2.1、networkD3 0.2.13