带R的状态转换图

时间:2018-12-03 00:51:23

标签: r

有人知道如何创建这样的图吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

使用igraph包可以很好地逼近图。 下面的代码将边缘设置为data.frame,然后使用graph_from_data_frame将其变成图形。您可以在此时进行绘图,但是尽管它的内容与图形相同,但看起来却不像图形。因此,有几个步骤可以使它看起来像您要求的那样。

C是边缘的曲率。我使它们全部都是直的(曲率= 0),除了节点0和3之间的两个。我不希望它们彼此叠置,因此我给了它们一个小的曲率。

LO是一种布局,用于按照您执行的相同模式排列节点。

edge.loop.angle参数的作用是使从0到其自身的循环布局良好。

最后,节点的默认颜色为橙黄色,因此我将其更改为白色(如您的图片一样)。

library(igraph)

from = c(0,0,0,0,1,2,3)
to   = c(0,1,2,3,2,3,0)
weight = c(0.1,0.2,0.3,0.4, 1,1,1)

Edges = data.frame(from,to,weight)
g = graph_from_data_frame(Edges)

C = rep(0,7)
C[c(4,7)] = 0.15

LO = matrix(c(0,1,0,1,1,1,0,0), ncol=2)

plot(g, edge.label=E(g)$weight, layout=LO, edge.loop.angle=-pi/2,
    vertex.color="white", edge.curved=C)

Network plot