我有一个表格格式如下:
Item A | Item B | Weight
X | Y | 2
X | Z | 5
Y | Z | 3
Y | W | 2
... | ... | ...
我想生成一些图形,其中每个字母(W,X,Y,Z)是一个节点,并且根据项目B的权重具有一定宽度的链接。
问题是我可以使用什么来生成此图表?可以是工具,Java或R库或其他语言。方式没关系,我只需要生成图表。
答案 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)
编辑:
与基本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)
答案 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)