如何使用r

时间:2016-01-26 03:18:18

标签: r igraph markov-chains

我有一个大的转换矩阵,我想在r中绘制一个图形。我已选择markovchain包来执行此操作,这允许我将此矩阵转换为markovchain对象,然后将其绘制如下:

library(markovchain) tMat = matrix(c(0,.2,.7,.1,.3,.4,.3,.1,.4,.5),3,3) mc = new("markovchain",transitionMatrix = tMat) plot(mc)

产生以下输出: enter image description here

当然,这只是一个例子,正如我之前提到的那样,真正的转换矩阵更加毛茸茸。

我的问题是:如何只绘制值大于某个最小阈值的边?如果我试图将所有低于某个阈值的值“归零”,则markovchain会抱怨行不总和为1(因为它不再是一个单一的社会矩阵)。但对于一个非常复杂的图形,连接到顶点的边总和为1并不重要,更重要的是图形仍然可读。有没有办法做到这一点?

我知道绘图函数是建立在igraph.plot之上的,所以我希望那里有一些可能有帮助的选项吗?

任何建议都会非常感谢!

-Paul woops:我回答了我自己的问题。只是想留下这个,以防其他人遇到同样的问题:你可以简单地创建markovchain对象,然后进入其transitionMatrix属性并直接编辑值: mc@transitionMatrix[mc@transitionMatrix<.2] = 0

产生: enter image description here

现在一个上帝后续问题实际上解决了原始问题,并且将是一个更好的解决方案:如何仅抑制图形输出中的数字而不是完全删除线条?它会导致先前连接的节点/顶点成为岛屿的丑陋情况。我认为这将涉及到存储这些值的igraph.plot对象的部分,即使在重新选择之后我也不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

  

如何仅抑制图形输出中的数字而不是   完全删除这些行?

将markovchain对象强制转换为igraph对象;现在你获得了所需的所有灵活性:

library(markovchain)
statesNames=c("a","b","c")
mc<-new("markovchain", states=statesNames, transitionMatrix=
          matrix(c(0.2,0.5,0.3,
                   0,1,0,
                   0.1,0.8,0.1),nrow=3, byrow=TRUE, dimnames=list(statesNames,statesNames)
                 ))
g <- as(mc, "igraph")
min <- 0.5
plot(g, edge.label=ifelse(E(g)$prob>=min, E(g)$prob, NA))