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 之间没有。有没有办法消除这个间隙?

我真正使用的图表更大,边缘更短。虽然在上面的示例中几乎没有注意到差距,但在我的情况下却令人困惑。

4

2 回答 2

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

差距

# 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="-") 

无间隙

于 2013-02-06T18:35:44.007 回答
1

我阅读了该?igraph页面并看到了使用“好看的抗锯齿 Cairo 设备”的建议?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 版本看起来都有不小的差距

请让我知道这对你有没有用。

于 2012-04-01T04:09:16.017 回答