【问题标题】:Scale the start- and end-point of the edge against the connected node size in the network plot using R使用 R 在网络图中根据连接的节点大小缩放边的起点和终点
【发布时间】:2022-12-18 02:31:39
【问题描述】:

提前感谢您的帮助!

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

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

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

【问题讨论】:

    标签: r igraph ggraph


    【解决方案1】:

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

    Does size for ggplot2::geom_point() refer to radius, diameter, area, or something else?

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

    用你的样本构建一个 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) 
    

    resulting ggraph

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-13
      • 2016-08-30
      • 2016-06-01
      • 2015-09-09
      • 1970-01-01
      • 2018-07-11
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多