2016-01-26 50 views
2

上繪製某些最小閾值以上的邊緣我有一個很大的轉換矩陣,我想繪製一個r圖。我所選擇的馬爾可夫鏈包來完成,這允許我把這種矩陣變換爲馬爾可夫鏈對象,然後如下繪製它:如何只使用markovchain在r

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

當然,這只是一個例子,正如我之前提到的那樣,真正的轉換矩陣非常有趣。

我的問題是:如何繪製只有值大於某個最小閾值的邊?如果我試圖「清零」低於某個閾值的所有值,馬爾科夫鏈就會抱怨這些行不會加在一起(因爲它不再是一個單一的社交矩陣)。但是對於一個非常複雜的圖,連接到一個頂點的邊總和爲1並不重要,更重要的是圖保持可讀性。有沒有辦法做到這一點?

我知道plot函數是建立在igraph.plot之上的,所以我希望有一些選擇可以幫助嗎?

任何建議將不勝感激!

-Paul woops:我回答了我自己的問題。只是想離開這裏這情況下,其他人遇到同樣的問題:你可以簡單地創建馬爾可夫鏈的對象,然後進入其transitionMatrix屬性和直接編輯值: [email protected][[email protected]<.2] = 0

主要生產: enter image description here

現在上帝的後續問題實際上得到了原始問題,並且會是一個更好的解決方案:如何僅抑制圖形輸出中的數字而不是完全刪除線條?它導致以前連接的節點/頂點成爲島嶼的醜陋情況。我認爲這將涉及到存儲這些值的igraph.plot對象的部分,即使在重新分類之後,我也不知道該如何做。

回答

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)) 
+1

謝謝!這正是我所期待的。應該給我足夠的能夠使用igraph文檔回答我自己的問題。 – Paul