【问题标题】:Plot of undirected igraph shows gaps between edge and vertex on one end of edge无向 igraph 的绘图显示边缘一端的边缘和顶点之间的间隙
【发布时间】:2012-03-27 11:22:18
【问题描述】:

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

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

【问题讨论】:

  • 这对我来说很好。我确实知道,如果您尝试在非方形绘图区域进行绘图,您所描述的往往会发生,但我不记得您实际上是如何做到的。相关的,你可以试试我的包library("qgraph");qgraph(edges),这个行为不应该发生。
  • 我在Windows下看到了问题。随着窗口大小的调整,间隙的大小会增加。在这种情况下,这是一个非常小的差距,但我非常感谢您为完美所做的努力。您能否使用layout()igraph 函数)返回顶点坐标,然后从头开始绘制您自己的图形。先绘制边,然后在顶部绘制顶点。
  • 可能是一个错误。顺便提一句。如果您调整绘图的大小,那么最好重新绘制它,因为重新缩放可能会放大舍入误差。最好在bugs.launchpad.net/igraph 报告 igraph 错误。

标签: r plot igraph


【解决方案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="-") 

【讨论】:

    【解决方案2】:

    我阅读了?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版本看起来都没有小差距

    让我知道它是否适合你。

    【讨论】:

    • 感谢您指出这一点!我没有尝试过,因为我实际上使用的是tikz 设备,它也会产生间隙。
    • @severin,从你写的内容来看,我假设你不能使用上面的解决方案,但需要使用 tikz 解决方案?
    • 由于某种原因,我去年错过了您的问题。对不起!是的,很遗憾,我必须使用 tikz 设备。
    • @severin,你解决了这个问题吗,你还在努力解决它吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2019-12-05
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多