使用edgebundle

时间:2017-02-28 13:08:04

标签: r

我正在尝试制作一个和弦图,其中顶点按因子(模块)分组,边缘由其他因素着色。

我非常喜欢使用edgebundle()时所取得的布局,并尝试按照此处的所有说明进行操作:

  

Network chord diagram woes in R

(他描述了一种"黑客"为边缘着色的方法,但我无法做到这一点...) 所以,我找不到以任何简单的方式实现这两个着色规则的方法。

所以我想现在放弃edgebundle()并重新开始使用像chordDiagram()这样的函数 - 但是我真的很喜欢第一个函数中的布局(而且我已经花了太多时间在这上面) 也许有人可以帮助我,我可以坚持使用edgebundle()

这是我的步骤 - 它不漂亮,我道歉,我对R不太熟练,所以我经常做蠢事。

consensus_taxa是边的数据框,其中taxa1和taxa2的标签包含它所属的模块编号的前缀,如下所示:

                             taxa1                              taxa2        rho
1  3.ITS_Uncl.Mortierella_OTU985144    3.ITS_Uncl.Ascomycota_OTU258690 -0.9725180
2     1.ITS_Uncl.Mortierella_OTU979  1.ITS_Uncl.Mortierella_OTU2523736  0.9629500
3    3.ITS_Uncl.Pleosporales_OTU136349 3.ITS_Uncl.Basidiomycota_OTU258716  0.9615385

m_meta是元数据,例如其他标签和模块信息:

m_meta[1:3,1:7]
                                  comb                           taxa1    trt        rho module
1  1.Bact_Uncl.Proteobacteria_OTU248 Bact_Uncl.Proteobacteria_OTU248 meadow -0.5000000      1
2   1.Bact_Uncl.Bacteroidetes_OTU695  Bact_Uncl.Bacteroidetes_OTU695 meadow -0.8434475      1
3  1.ITS_Uncl.Mortierella_OTU2523736 ITS_Uncl.Mortierella_OTU2523736 meadow  0.9629500      1
                      ID  Org
1    Uncl.Proteobacteria Bact
2      Uncl.Bacteroidetes Bact
3       Uncl.Mortierella  ITS

所以这是我的尝试:

g_my <- graph.data.frame(consensus_taxa, directed=F, vertices=m_meta)
  mod_col <- as.factor(as.character(V(g_my)$module))
  # generation random colors
  cl <- colors(distinct = TRUE)
  set.seed(15887) # to set random generator seed
  mycols2 <- sample(cl, length(levels(mod_col)))
  levels(mod_col) <- as.character(mycols2)
  V(g_my)$color <- as.character(mod_col)

  # Edge color green when positiv (rho >0) and red when negativ
  edge_col <- matrix(nrow=0,ncol=1)
  for (i in 1:length(consensus_taxa$rho)){
    t <- consensus_taxa$rho[i]
    ecol <- if(t>0) {as.character("green")} else {as.character("red")}
  edge_col <- rbind(edge_col, ecol)
  print(i/length(consensus_taxa$rho)) }
  E(g_my)$color <- as.character(edge_col)

  v_lab <- as.character(m_meta$ID)

  #### Loosing sorting of the vertex in the circle (and in the general the  layout is fare from nice)
   plot(g_my, layout = layout.circle, vertex.size=degree(g_my)*0.5, vertex.label = v_lab)

   #### loosing color codes and labels in this way, but layout is in general nice
   edgebundle(g_my)->eb
  eb

有什么建议吗?

它的外观如下(第一个中也存在尺寸问题)。

[![edgebundle][1]][1]
[![normal_plot][2]][2]
[![no_labels][3]][3]

0 个答案:

没有答案