繁体   English   中英

使用 R 在网络图中根据连接的节点大小缩放边的起点和终点

[英]Scale the start- and end-point of the edge against the connected node size in the network plot using R

提前感谢您的帮助!

我的问题是,给定一个集合列表,我如何使用网络图可视化两个集合中任何一个的重叠,如下所示?

一张图来说明问题

请随时生成任何集以供演示。 或者您可以使用以下简单集。

set.seed(123456)
A <- sample(1:100, 60)
B <- sample(1:100, 50)
C <- sample(1:100, 75)

在 ggraph 中,我们必须对节点使用 scale_size(),对边使用 scale_edge_width() 以协调比例。 ggplot 中的点大小已经按其半径缩放:

ggplot2::geom_point() 的大小是指半径、直径、面积还是其他?

因此不需要进行任何转换,除非您希望点的大小与面积的边缘宽度成正比。

用你的样本构建一个 tbl_graph

#edges are determined by length of intersection
edges <- data.frame('from'=c('A','B','C'),'to'=c('B','C','A'),
'weight'=c(length(intersect(A,B)),length(intersect(B,C)),length(intersect(C,A))))

#nodes are weighted by the length of the sample
nodes <- data.frame('name'=c('A','B','C'),size=c(length(A),length(B),length(C)))

tbl_graph <- tbl_graph(nodes=nodes,edges=edges)

现在,如果您直接使用这些大小构建网络,节点之间的距离将自动确定,并且大多数 ggraph 布局将节点之间的距离设置在 0 和 1 之间,从而导致具有超大边和节点的拥挤图。 如果节点之间的距离不重要,我们可以简单地使用比例因子来缩小节点大小和边宽以适合图形。

为了协调宽度和大小,我们将边宽的范围缩放到边宽的最小值和最大值,并将节点大小缩放到节点大小的最小值和最大值,并在节点缩放时乘以 2按直径。 这样,节点大小和边缘宽度将按比例缩放到它们的实际值,而不是由布局决定。 我还在此处包括其他注释方法以显示节点和边缘的大小。 node_point shape=21 是空心圆。 祝你好运!

scale_factor = 0.1
ggraph(tbl_graph) + geom_edge_link(aes(width=weight*scale_factor,label=weight),label_dodge=unit(-4,'mm'),angle_calc='along') + 
scale_edge_width(range=c(min(edges$weight)*scale_factor,max(edges$weight)*scale_factor)) + 
geom_node_point(aes(size=size * scale_factor),shape=21) + scale_size(range=c(min(nodes$size)*scale_factor*2,max(nodes$size)*scale_factor*2)) + 
theme_linedraw() + geom_node_text(aes(label=paste(name,':',size)),nudge_x=-0.1) 

结果图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM