【问题标题】:Feed coordinates to tkplot() or use tkplot's arrows in plot.igraph()将坐标输入 tkplot() 或在 plot.igraph() 中使用 tkplot 的箭头
【发布时间】:2013-03-22 18:03:36
【问题描述】:

有没有办法可以将坐标矩阵提供给 igraph 中的 tkplot 函数?我尝试将布局参数设置为我的坐标矩阵,但它只会产生一个空白图。

我可以将坐标输入 plot.igraph() 并生成一个有向的加权边缘图,其中顶点位于我想要的位置。但是,箭头很时髦。箭头放置在边缘下方,因此如果边缘足够宽(我的一些),那么箭头至少部分隐藏。我试过改变边缘和箭头的宽度,但我的一些边缘的权重太大了。 tkplot 中产生的箭头更接近我想要的。

下面的第一个图对应于用 plot.igraph 制作的不需要的箭头。第二个图是来自 tkplot 的所需箭头。

我不想要的箭头:

我想要的箭头:

我需要做一个或另一个的原因是因为我需要在完全相同的位置制作更多这些图,并且不想继续使用 tkplot 来处理- 每次移动节点。我有很多,而且也不可能让它们处于与以前完全相同的位置。

希望这足够具体。这是我第一次发帖,所以请让我知道我应该包括哪些其他信息。我尝试在 R 2.15 和运行 2.11 的机器上以及 igraph 包 0.5.5 和 igraph 0.6.5 上给出 tkplot 坐标。

如果这是在某个地方,真的很抱歉浪费时间。我已经花了一段时间寻找并试图与我的研究生 PI 一起努力解决这个问题,我们已经陷入死胡同好几天了。感谢您的任何反馈。

【问题讨论】:

    标签: r igraph tkplot


    【解决方案1】:

    不幸的是,无法修改箭头的外观,我同意这很糟糕,尤其是因为它们很丑。

    为了更具建设性,您可以使用tkplot() 来绘制绘图,您实际上可以通过一些技巧和使用内部 igraph 函数自动将它们保存到文件中。下面是一个例子。这够好吗?

    library(igraph)
    set.seed(1)
    g <- graph.star(10, center=10) %u% graph.ring(9, directed=TRUE)
    E(g)$width <- sample(1:10, ecount(g), replace=TRUE)
    lay <- layout.auto(g)
    
    id <- tkplot(g, layout=lay)
    tkp <- igraph:::.tkplot.get(id)
    tkpostscript(tkp$canvas, file="/tmp/output.eps")
    tkplot.close(id)
    

    【讨论】:

    • 感谢您的回复!嗯..嗯,部分问题是我需要顶点在我拥有的位置。我有 61 个,我已经布置了它们的位置以对应于它们在空间地图上出现的位置。有没有办法可以将我的坐标矩阵转换为布局对象并在 tkplot() 的布局参数中使用它?我尝试过使用'layout()',但没有成功
    • 我不确定您使用layout() 是什么意思,但您可以将您的坐标用作tkplot() 函数的布局参数。就像我上面的例子一样,但是使用你预先计算的坐标而不是layplot()tkplot() 在这方面的工作方式完全相同。
    • 太棒了,谢谢 Gabor!一旦我设置它就起作用了:layout=my.layout %*% diag(c(1,-1))。在我将它设置为 my.layout 之前,它只是产生了一个空白图。感谢您的所有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2020-10-28
    相关资源
    最近更新 更多