2012-03-27 17 views
1

igraphを使用して作成された非常に簡単な無向グラフのプロットを考えてみましょう。無向グラフのプロットは、エッジの一端のエッジと頂点の間のギャップを示します。

library(igraph) 

edges = matrix(c(1,2), nrow=1, ncol=2) 
g = graph.edgelist(edges, directed=FALSE) 
set.seed(42) 
plot(g, edge.width=2, vertex.size=30, edge.color='black', main='') 

エッジと頂点2との間に小さな隙間があるが、エッジと 頂点1との間のギャップを除去する方法はありますか?

私が実際に作業しているグラフは大きく、エッジはたくさんあります。 短いです。上記の例では、ギャップはほとんど気づかれませんが、私の場合は が混乱しています。

+0

これは私のために私のために正常に動作します。あなたが描いているのは、正方形ではないプロット領域にプロットしようとすると起こる傾向があるが、実際にその方法を覚えていないことは分かっている。これに関連して、私のパッケージ 'library(" qgraph "); qgraph(edges)'を試すことができます。 –

+1

Windowsの問題が表示されます。ウィンドウのサイズが変更されると、ギャップのサイズが大きくなります。このケースでは非常に小さなギャップですが、私は完成のためのあなたの努力に感謝します。頂点の座標を返すために 'layout()'( 'igraph'関数)を使用して、最初から独自のグラフをプロットすることができますか?最初にエッジをプロットし、次に頂点をプロットします。 – digitalmaps

+0

バグかもしれません。 Btw。プロットのサイズを変更すると、再スケーリングによって丸め誤差が拡大する可能性があるため、プロットを再描画することをお勧めします。 igraphのバグはhttps://bugs.launchpad.net/igraphで報告することをお勧めします。 –

答えて

1

これは実際にはigraphのバグであり、矢印ヘッドが存在しない場合でも、igraphが矢頭のためにある程度のスペースを残しているために起こります。私は次のigraphバージョンで修正します。

回避策として、各エッジを2回重ねてプロットすることができます。このためには、矢印を指示してから矢印を避けるためにedge.arrow.modeオプションを使用する必要があります。これは、矢印プロッタによってエッジの一方の端だけが変更されたためです。この方法でグラフをプロットするのはいくぶん愚かですが、今はもっと良い回避策を見つけることができません。私が言ったように、新しいバージョン(0.6.4以降のバージョン)ではこの問題は発生しません。

library(igraph) 

# Zoom in on the critical region, although the gap always has the 
# same size, unless you make the plotting window bigger 
g <- graph(c(1,2), directed=FALSE) 
par(mar=c(0,0,0,0)) 
plot(g, edge.width=2, vertex.size=20, edge.color='black', main='', 
    rescale=FALSE, xlim=c(0.9,1), ylim=c(0.9,1), 
    layout=rbind(c(0,0), c(1,1)), vertex.color="#ffffff11") 

gap

# This plot should have no gaps 
g2 <- as.directed(g, mode="mutual") 
par(mar=c(0,0,0,0)) 
plot(g2, edge.width=2, vertex.size=20, edge.color='black', main='', 
    rescale=FALSE, xlim=c(0.9,1), ylim=c(0.9,1), 
    layout=rbind(c(0,0), c(1,1)), vertex.color="#ffffff11", 
    edge.arrow.mode="-") 

no gap

+0

回避策をお寄せいただきありがとうございます。これは私のためにうまくいく! – severin

1

私は?igraphページを読んで、「美しいアンチエイリアス化されたカイロデバイス」?igraphを使用するように勧めました。

だから、私は小さなギャップがないようにPNGやPDF版の両方が見える

library(Cairo) 
Cairo(1600, 1600, file="plot.png", type="png", bg="white") 
plot(g, edge.width=2, vertex.size=30, edge.color='black', main='') 
dev.off() 

と、

CairoPDF("plot.pdf", 6, 6, bg="transparent") 
plot(g, edge.width=2, vertex.size=30, edge.color='black', main='') 
dev.off() 

を試してみました。

あなたのために働くかどうか教えてください。

+0

それを指摘してくれてありがとう!実際には[tikz](http://pgf.sourceforge.net/)デバイスを使用しているため、試してみませんでした。 – severin

+0

@severin、そしてあなたが書いたことから私は上記のソリューションを使用できないと思っていますが、tikz-solutionを使用する必要がありますか? –

+0

何らかの理由で私はあなたの質問を昨年忘れました。ごめんなさい!はい、残念ながら、私はtikzデバイスを使用する必要があります。 – severin

関連する問題