考虑使用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 :(得分: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")
# 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="-")