如何使用 r 中的马尔可夫链仅绘制高于某个最小阈值的边缘

How to only plot edges above some minimum threshold value using markovchain in r

我有一个很大的转换矩阵,我想在 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)

产生以下输出:

当然,这只是一个例子,正如我之前提到的,真正的转换矩阵要复杂得多。

我的问题是:如何只绘制值大于某个最小阈值的边?如果我尝试 "zero out" 所有低于某个阈值的值,markovchain 会抱怨行总和不为一(因为它不再是一个奇异的随机矩阵)。但是对于一个非常复杂的图,连接到顶点的边总和为 1 并不重要,更重要的是图保持可读性。有什么办法吗?

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

如有任何建议,我们将不胜感激!

-保罗 糟糕:我回答了我自己的问题。只是想把它留在这里以防其他人遇到同样的问题:你可以简单地创建马尔可夫链对象,然后进入它的 transitionMatrix 属性并直接编辑值: mc@transitionMatrix[mc@transitionMatrix<.2] = 0

产生:

现在一个真正解决了原始问题并且会是更好解决方案的上帝后续问题是:如何只抑制图形输出中的数字而不是完全删除行?它会导致以前连接的 nodes/vertices 变成孤岛的丑陋情况。我认为这将涉及到存储这些值的 igraph.plot 对象的一部分,即使在重新搜索之后我也不知道该怎么做。

how to only suppress the numbers in teh graph output rather than deleting the lines altogether?

将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))