按照下面绘制术语 - 文档矩阵的示例,
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)
有没有办法根据节点的顶点颜色对节点进行着色?有没有一个例子可以让更多顶点的节点更大或者那个效果更好?
答案 0 :(得分: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
我保存了您想要的术语,然后我基本上复制了plot命令中的代码来计算与截止值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
,您可以将它们的颜色设置为颜色。