首页 > 解决方案 > 使用基于属性的布局从数据框创建图形

问题描述

我从数据框中创建了一个图表。我希望根据包含的汉明值排列和移动顶点data.rw$Hamming.

我想要一些帮助

data.rw <- structure(list(g1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 
6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 
11, 11, 12), g2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3, 
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 6, 7, 8, 9, 10, 11, 12, 13, 
7, 8, 9, 10, 11, 12, 13, 8, 9, 10, 11, 12, 13, 9, 10, 11, 12, 
13, 10, 11, 12, 13, 11, 12, 13, 12, 13, 13), Hamming = c(116, 
86, 101, 92, 84, 78, 83, 102, 87, 100, 96, 97, 90, 111, 98, 90, 
92, 87, 114, 95, 108, 104, 109, 85, 74, 68, 60, 67, 84, 71, 84, 
78, 79, 83, 85, 79, 78, 101, 90, 101, 91, 92, 72, 66, 67, 92, 
77, 90, 82, 83, 62, 59, 88, 71, 86, 78, 81, 59, 78, 63, 74, 68, 
73, 83, 60, 77, 75, 72, 89, 100, 94, 97, 79, 75, 82, 90, 93, 
91)), row.names = c(NA, -78L), class = "data.frame")

set.seed(1234)
vertice.df <- unique(c(data.rw$name1,data.rw$name2))
g <- graph_from_data_frame(d = data.rw, vertices = vertice.df, directed = F)

plot(g)

图表

标签: rlayoutigraphweighted-graph

解决方案


我建议为此任务使用基于距离的布局,我想到了多维缩放:

m <- get.adjacency(g, attr = "Hamming", sparse = F) 
# optionally: m <- dist(m)
l <- layout_with_mds(g, dist = m, dim = 2) 

首先从图中提取加权邻接矩阵并将其输入到布局函数(dist = m)中。这将返回一个二维矩阵l( dim = 2),您可以将其用作节点位置的布局。

plot(g, layout = l)

看看?cmdscale您是否对 MDS 感兴趣,特别是eig稍后评估拟合优度的参数。有可能两个维度不足以充分反映节点之间的距离。但这由你决定。


推荐阅读