使用 ggraph::geom_edge_link() 绘制因子水平的行为 考虑以下数据框现在我对因子进行排序边缘列表节点列表tbl_graph 文件现在当我绘制它我得到了这个:

问题描述

我在使用 ggraph::geom_edge_link() 绘制边的顺序时遇到问题 - 我需要它们遵守因子级别的顺序(下面的因子 cat)并根据强度值具有不同的宽度。(我已经尝试了解这是否是一个错误 @ggraph Github,但到目前为止还没有反馈 (#279)

我希望边按照它们出现在提供 tbl_graph 的边列表中的相同“顺序”绘制,但情况似乎并非如此 - 预期行为应该是什么?

考虑以下数据框

    from <- c("A","A","B","C","D","E","F","G","G")
    to <- c("H","I","J","O","H","N","L","M","H")
    cat <- c("weak","moderate","strong","v_strong","weak","v_strong")
    strength <- c(0.7,1,0.4,0.9,0.2,0.6,0.5,0.3,0.7,0.8,0.1,0.6)
    
    df <- data.frame(from,to,cat,strength)
    
    glimpse(df)

Rows: 33
Columns: 4
$ from     <chr> "A","C"...
$ to       <chr> "H","H"...
$ cat      <fct> weak,moderate,strong,v_strong,weak,...
$ strength <dbl> 0.7,1.0,0.0,0.3...

现在我对因子进行排序

df$cat <- factor(df$cat,levels = c("weak","v_strong"))

levels(df$cat)

[2] "weak"     "moderate" "strong"   "v_strong"

边缘列表

edge.list <- df

节点列表

n.from <- df %>%
   group_by(from) %>%
   summarise(n = n()) %>%
   rename(name = from)
 
n.to <- df %>%
  group_by(to) %>%
  summarise(n = n()) %>%
  rename(name = to)
 
node.list <- rbind(n.from,n.to)

tbl_graph 文件

Netw <- tbl_graph(nodes = node.list,edges = edge.list)

现在当我绘制它

ggraph(Netw) +
 geom_edge_link(aes(edge_colour = cat,width = strength)) +
 scale_edge_width_continuous(limits = c(0,1),range=c(.1,2.5)) +
 scale_edge_colour_manual(values = c("moderate" = "grey80","weak" = "red","very strong" = "#3E1404","strong" = "#9F6B39"))

我得到了这个:

enter image description here

我希望红色边缘(对应于弱类别)绘制在后面而不是前面

我尝试了不同的方法(例如,使用 as.character(cat)、不同的顺序、移除强度,甚至将弱与适度合并会产生相同的输出),但总是得到相同的结果。我只是不明白这是否是预期的行为以及如何获得所需的输出。任何帮助都会很棒!

我在 R R 版本 4.0.3 中使用 ggraph_2.0.4

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)