从具有关系权重的表格生成视觉表示

发布于 2025-01-07 22:06:32 字数 311 浏览 0 评论 0原文

我有一个以下格式的表格:

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

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

问题是什么我可以用来生成这个图表吗?可以是工具、Java 或 R 库或其他语言。方式并不重要,我只需要生成图表。

I have a table in the following format:

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

I want to generate some graph where each letter(W,X,Y,Z) is a node and have a link with some width according to the weight to the Item B.

The question is what I can use to generate this graph? Can be a tool, a Java or R library or another language. The way doesn't matter, I only need to generate the graph.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

失眠症患者 2025-01-14 22:06:32

借用 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)

在此处输入图像描述

Borrowing the code of digEmAll I'll do the same in 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

长途伴 2025-01-14 22:06:32

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

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

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'))

请参阅 此文档了解更多信息。

Another way in R is using plot.igraph(infos about parameters can be found here).

Below you can find a working example (based on your data):

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

EDIT :

Exactly as in the base R plot() function, you can show a legend by adding the following line at the end of previous code:

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

Please refer to this documentation for further information.

只是我以为 2025-01-14 22:06:32

在 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)

In R, you could use 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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文