从具有关系权重的表中生成可视化表示

时间:2012-02-21 17:41:52

标签: java r language-agnostic graph nodes

我有一个表格格式如下:

Item A | Item B | Weight
   X   |   Y    |   2
   X   |   Z    |   5
   Y   |   Z    |   3
   Y   |   W    |   2
  ...  |  ...   |  ...

我想生成一些图形,其中每个字母(W,X,Y,Z)是一个节点,并且根据项目B的权重具有一定宽度的链接。

问题是我可以使用什么来生成此图表?可以是工具,Java或R库或其他语言。方式没关系,我只需要生成图表。

3 个答案:

答案 0 :(得分:3)

R中的另一种方法是使用plot.igraph(有关参数的信息可以找到here)。

您可以在下面找到一个工作示例(基于您的数据):

library(igraph)

data <- read.table(text=
"Item A,Item B,Weight
X,Y,2
X,Z,5
Y,Z,3
Y,W,2", sep=',',header=TRUE)

g <- graph.data.frame(data,directed=TRUE)

vColors <- 'MediumSeaGreen'
vSizes <- 40 
vShapes <- 'circle' 
vLabels <- V(g)$name
vFontSizes <- 1.5

eColors <- 'blue'
eArrowSizes <- 1
eWidths <- 1
eLabels <- as.character(E(g)$Weight)
eLTypes <- 'dashed'
eFontSizes <- 1.5

plot(g, layout=layout.fruchterman.reingold,
        vertex.color=vColors, vertex.size=vSizes, vertex.shape=vShapes, 
        vertex.label=vLabels, vertex.label.dist=0, vertex.label.cex=vFontSizes,
        edge.color=eColors, edge.width=eWidths, edge.arrow.size=eArrowSizes,  
        edge.label=eLabels, edge.lty=eLTypes, edge.label.cex=eFontSizes)

enter image description here

编辑:

与基本R plot()函数完全相同,您可以通过在上一代码末尾添加以下行来显示图例:

legend(x=-1,c('X - Foo','Y - Bar','Z - Foo2','W - Bar2'))

有关详细信息,请参阅this documentation

答案 1 :(得分:3)

借用digEmAll的代码我会在qgraph中做同样的事情:

data <- read.table(text=
"Item A,Item B,Weight
X,Y,2
X,Z,5
Y,Z,3
Y,W,2", sep=',',header=TRUE)

library(qgraph)
qgraph(data)

enter image description here

答案 2 :(得分:2)

在R中,您可以使用diagram::plotweb

library(diagram)
#sample data
nodes <- LETTERS[23:26]
dat <- expand.grid(nodes,nodes)
dat$Weight <- rpois(16,5)+1

#put data in format for plotweb
datMat <- xtabs(Weight~Var1+Var2,dat)
#no loops
diag(datMat)<-0

#plot
plotweb(datMat)