无向igraph的图显示了边缘一端的边缘和顶点之间的间隙

时间:2012-03-27 11:22:18

标签: r plot igraph

考虑使用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.有没有办法消除这种差距?

我真正合作的图表更大,边缘也很多 短。虽然在上面的例子中差距几乎没有引起注意,但事实确实如此 我的情况令人困惑。

2 个答案:

答案 0 :(得分:1)

我阅读了?igraph页面,并看到了建议使用'好看的抗锯齿开罗设备'?igraph

所以,我试过

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()

png和pdf版本看起来都没有小的间隙

让我知道它是否适合你。

答案 1 :(得分:1)

这确实是igraph中的一个错误,它的发生是因为igraph在那里为箭头留下了一些空间,即使箭头不在那里。我将在下一个igraph版本中修复它。

作为一种解决方法,您可以做的是将每个边缘绘制两次,彼此叠加。为此,您需要指示图表,然后使用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