2014-05-20 106 views
2

繼繪製下面的一個術語文檔矩陣的例子,色彩和繪圖項文檔矩陣

library("tm") 

    data("crude") 

    tdm <- TermDocumentMatrix(crude, control = list(removePunctuation = TRUE, 
                removeNumbers = TRUE, 
                stopwords = TRUE)) 

    plot(tdm, terms = findFreqTerms(tdm, lowfreq = 6)[1:25], corThreshold = 0.5) 

有基於他們有多少個頂點有辦法上色的節點?有沒有一個例子讓更多頂點的節點或者這個效果呢?

回答

5

我看起來最終被繪製的節點是類AgNode。在?AgNode幫助頁面上列出您可以設置AgNode的屬性。一旦知道了要設置的屬性,就可以將一個列表傳遞給nodeAttrs參數給您的繪圖命令。 (編輯:實際上是一個更好的列表可能是節點在Rgraphviz documentation屬性描述)

nodeAttrs的參數採取一個列表,其中該列表中的每個命名的元件對應於AgNode的屬性之一。在每個位置,存儲一個命名向量,其中向量的名稱與節點名稱(即術語矩陣中的單詞)相對應,並且該值表示該屬性的值。例如

list(
    color=c(futures="blue", demand="red"), 
    shape=c(crude="ellipse", budget="circle"), 
) 

所以,當你想通過他們的頂點數來着色方面,我會假設你的意思是邊緣,因爲每個字是圖中的一個頂點。因此,使用您的tdm對象

freqterms <- findFreqTerms(tdm, lowfreq = 6)[1:25] 
vtxcnt <- rowSums(cor(as.matrix(t(tdm[freqterms,])))>.5)-1 

我救你想要的條款,然後我基本上覆制繪圖命令裏面的代碼來計算你的0.5截止的相關性,看看有多少在這種換句話說每個字子集連接到。這是vtxcnt變量。 (可能有更高效的方法來提取這個,但我找不到它)。現在,我已經準備好指定顏色

mycols<-c("#f7fbff","#deebf7","#c6dbef", 
    "#9ecae1","#6baed6","#4292c6", 
    "#2171b5", "#084594") 
vc <- mycols[vtxcnt+1] 
names(vc) <- names(vtxcnt) 

在這裏,我抓起一些顏色ColorBrewer。我有8個值,因爲vtxcnt的值範圍是0-8。如果您的範圍較廣或想要摺疊類別,則可以使用cut()命令對它們進行分類。然後我創建了一個名爲矢量vc,將每個單詞匹配到適當的顏色。 vc應該是這樣的

head(vc) 
# ability accord agreement  ali  also analysts 
# "#084594" "#c6dbef" "#2171b5" "#9ecae1" "#f7fbff" "#4292c6" 

而現在我們已經準備好,使情節

pp <- plot(tdm, 
    terms = freqterms, 
    corThreshold = 0.5, 
    nodeAttrs=list(fillcolor=vc)) 

因此,大家可以看到節點的定製是非常靈活。如果您將正確的值傳遞給nodeAttrs,您可以根據自己的喜好爲其着色。

colored TermDocumentMatrix Plot