2017-02-08 18 views
3

plot.Node関数で生成されたプロットをdata.treeに保存できません。私は次のように試しました:Rでは、data.treeプロットをファイルに保存するにはどうすればよいですか?

### Create tree object and plot it 
data(acme); 
plot(acme); 

これはうまくいき、期待通りにプロットを示しています。

### Try saving it as png 
png(filename='file.png', type='cairo-png'); 
plot(acme); 
dev.off(); 

これにより、空のファイルが作成されます。 ggsaveも同じです。確かに、plot.Nodeはフードの下でDiagrammeRを使用するので、私はそのパッケージを調べました。エクスポート、明らかに

export_graph(ToGraphViz(acme), file_name="file.png"); 

Error in graph$dot_code : $ operator is invalid for atomic vectors 

:私は最初のGraphVizをに変換するとき

Error in file.exists(diagram) : invalid 'file' argument 

が、私は別のエラーを取得する:これはエラーになります

export_graph(acme, file_name="file.png"); 

:それは、グラフをエクスポートする機能を有していますGraphVizはDiagrammeRが期待しているものにはあまりエクスポートしません。

私はRStudioに入っていますので、理論上はGUIを使ってプロットを保存できますが、スクリプトでこれを必要とします。

どうやら、plot.Nodeは実際にプロット何もしない - その代わり、HTML/JSのを発生するようです。結果がグラフィックとして保存されないことを意味しますか?または、私が完全に失っているどこかの輸出/変換機能がありますか?確かに私は何かが分からないように感じる - 私は画像としてかなりdata.treeをプロットして格納する必要があると仮定します。しかし、私はまだどのような潜在的な解決策を探ることができるのか分かりません。

誰でも持っているどんなポインタでも非常に感謝しています!

答えて

2

セバスチャン-cが示唆したように、物事は、データとR 3.3.3のように、少し異なるMatherionによって提案されたよりも動作するようになりました。ツリー0.7.0およびDiagrammeR 0.9.0

前提条件:DiagrmmeRsvgおよび依存関係をインストールする必要があります。お使いのOSによっては、V8をインストールする必要があります。 Rで

apt-get install libv8-3.14-delibv8-3.14-dev 

そして:Ubuntuでたとえば

install.packages("DiagrammeRsvg") 

Windows上で、私は(クロームがインストールされているかもしれないので?)何もインストールする必要はありませんでした。

DiagrammeRsvgが利用可能になると、実行します: `ToGraphViz`機能から来るん

library(data.tree) 
data(acme) 
library(DiagrammeR) 
export_graph(ToDiagrammeRGraph(acme), "export.pdf") 
1

私は答えを少なくとも部分的に見つけました。 SVGにGraphVizダイアグラムをエクスポートする専用パッケージがあります:DiagrammeRsvg

だから、これは動作します:

treeAsSVG <- export_svg(grViz(ToGraphViz(acme))); 
writeLines(treeAsSVG, "filename.svg")); 

grVizが実際export_svgが解釈できるものにToGRaphViz出力を変換する必要があります。誰がこの質問の際にも同様の問題やつまずきを持っている場合、

export_graph(grViz(ToGraphViz(acme)), file_name="filename.svg"); 

しかし:例えば、これはない作業を行います - 私はまだすべてがフードの下で何が起こっているのか(まだ)本当にわからないんだけどおそらく、この部分的な答えは、少なくとも輸出することができます。 htmlページ。 (as.phyloでアクメを変換することにより

+0

? –

+0

これは新しいバージョンのパッケージでは動作しないようです。代わりに 'treeAsSVG < - export_svg(render_graph(ToDiagrammeRGraph(acme)))'を使用しました。 –

1

)それは動作しますが、それは少し退屈になります。

plot(as.phylo(acme), 
    show.node.label=TRUE, 
    node.pos=2, 
    no.margin=TRUE 
    ) 
# adding edge labels 
edgelabels(as.vector(acme$Get("cost"))[-1], 
      adj = c(0,-0.5), 
      frame = "none") 

solution with as.phylo()

私もas.igraphを試してみました。しかし、ノードが重なると、それはかなりさえ少なくなります

plot(0, type="n", ann=FALSE, axes=FALSE, 
xlim=extendrange(ig[,1]), 
ylim=extendrange(ig[,2])) 
plot(ig, 
layout=layout_as_tree(ig,root=1), 
vertex.shape="rectangle", 
vertex.size=(strwidth(V(ig)$name) + strwidth("oo")) * 100, 
#vertex.size2=strheight("I") * 2 * 100, 
edge.label=acme$Get("p",traversal = "level")[-1] 
) 

solution with as.igraph()

関連する問題