Создайте визуальное представление из таблицы с весом отношения - PullRequest
5 голосов
/ 21 февраля 2012

У меня есть таблица в следующем формате:

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 ]

3 голосов
/ 21 февраля 2012

Другим способом в 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)

enter image description here

РЕДАКТИРОВАТЬ:

Точно так же, как в базовой функции R plot(), вы можете показать легенду, добавив следующеестрока в конце предыдущего кода:

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

Пожалуйста, обратитесь к этой документации для получения дополнительной информации.

3 голосов
/ 22 февраля 2012

Заимствуя код 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 голосов
/ 21 февраля 2012

В 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...