2

使用 iGraph,我如何用圆形曲线表示自反节点?默认情况下,这些曲线由收缩或泪滴形环表示。

4

2 回答 2

8

正如 Spacedman 所说,你需要做一些编程才能做到这一点。您可以绘制没有自环的图,然后添加它们(图基本上是散点图,您可以使用points和类似的函数向它们添加线),但这并非易事(特别是因为您需要知道节点的边缘,不是他们的中心)并且会导致自循环被绘制在其他所有看起来不太好的东西之上。

这个周末我更新qgraph了自循环的工作原理。qgraph可以用来绘制网络并且应该很好地与igraph. 例如:

# An adjacency matrix:
A <- matrix(1,3,3)

library("igraph")
# igraph graph and layout:
Graph <- graph.adjacency(A)
Layout <- layout.circle(Graph)

# Plot in qgraph:
library("qgraph")
qgraph(get.adjacency(Graph,sparse=FALSE),layout=Layout,diag=TRUE,directed=TRUE)

在此处输入图像描述

我对这些自循环的结果非常满意,而且它们似乎更符合您的描述。所以这可能是一个选择。但是,我的循环是硬编码的。作为参考,我使用内部函数计算节点的边缘(循环的起点和终点),并使用内部函数qgraph:::Cent2Edge计算循环的形状(样条线)qgraph:::SelfLoop

于 2012-09-21T09:57:56.007 回答
2

在里面plot.igraph你可以看到循环是使用一个plot.bezier函数绘制的,并且所有的控制都是在那里硬编码的。您必须重写大块的plot.igraph来调用plot.circle您必须编写的函数来执行此操作。

另外,我猜你不想要完整的圆圈,而是从顶点符号(其中包含顶点编号的默认蓝色圆圈)边缘开始并在另一部分结束(可能带有箭头)的圆段顶点符号的边缘?或者你想要像贝塞尔泪珠环那样接触符号的圆圈吗?

无论哪种方式,答案似乎都是“不,不是不做一些编程或向 igraph 家伙提交功能请求”

我发布了一个较早的答案,说涉及布局函数,但这不是真的 - 布局函数只定位顶点,绘制边缘是 plot.igraph 的工作。

于 2012-09-21T07:15:32.793 回答