微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。