【问题标题】:igraph simplifies when trying to color edgesigraph 简化了尝试为边缘着色时
【发布时间】:2019-06-24 23:41:09
【问题描述】:

我有几种细胞类型,想展示它们之间的联系。我的问题是如果我只使用plot(all.cnx),它会显示所有连接。但是,如果我想添加 edge.color 等,那么它会简化图形。例如,从“CT#1_3”到其他细胞类型的连接。由于我想显示所有边缘,如何防止这种简化?

谢谢, 伊利亚斯。

library("igraph")
my_cnxs = c("CT#1_0","CT#2_7","CT#1_2","CT#2_7","CT#1_3","CT#2_7","CT#1_5","CT#2_7","CT#1_6","CT#2_7","CT#1_0","CT#2_0","CT#1_0","CT#2_2","CT#1_0","CT#2_8","CT#1_2","CT#2_8","CT#1_3","CT#2_8","CT#1_5","CT#2_8","CT#1_6","CT#2_8","CT#1_2","CT#2_0","CT#1_2","CT#2_2","CT#1_3","CT#2_0","CT#1_3","CT#2_2","CT#1_5","CT#2_0","CT#1_5","CT#2_2","CT#1_6","CT#2_0","CT#1_6","CT#2_2","CT#1_1","CT#3_2","CT#1_1","CT#2_0","CT#1_1","CT#2_2","CT#1_2","CT#3_2","CT#1_3","CT#3_2","CT#1_5","CT#3_2","CT#1_6","CT#3_2","CT#3_2","CT#3_2","CT#3_2","CT#2_0","CT#3_2","CT#2_2","CT#2_8","CT#3_2","CT#2_8","CT#2_0","CT#2_8","CT#2_2","CT#1_1","CT#2_7","CT#1_2","CT#2_7","CT#1_3","CT#2_7","CT#1_5","CT#2_7","CT#1_6","CT#2_7","CT#3_2","CT#2_7","CT#2_8","CT#2_7")

my_edge_colors = c("green","green","green","green","green","green","green","green","green","green","green","green","black","black","black","black","black","black","black","black","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red","red")

all_cell_colors = c("yellow3","red","skyblue","orange","violet","cyan3","gray80","green","darkgreen","pink","gold","cadetblue1","purple","darkkhaki","chocolate","darkred","aquamarine","darkslategray4","blue","cyan1")

names(all_cell_colors) = c("CT#4_0","CT#1_0","CT#1_1","CT#1_2","CT#1_3","CT#1_4","CT#1_5","CT#1_6","CT#1_7","CT#3_1","CT#3_2","CT#2_0","CT#2_1","CT#2_2","CT#2_3","CT#2_4","CT#2_5","CT#2_6","CT#2_7","CT#2_8")

all.cnx = graph(my_cnxs)
my_layout = layout_(all.cnx, nicely())
my.cx.names = names(edges(all.cnx)[[1]][1]) 
my_vertex_colors = all_cell_colors[match(my.cx.names, names(all_cell_colors))]
plot(all.cnx, layout = my_layout, edge.color = my_edge_colors, edge.arrow.size=0.4, vertex.color = my_vertex_colors, vertex.size=30,vertex.frame.color="black", vertex.label.color="black",vertex.label.cex=0.5, vertex.label.dist=0, edge.curved=0.2)
plot(all.cnx ,layout = my_layout)

【问题讨论】:

  • “简化”是指连接节点 CT#1_3 和 CT#2_7 的边的合并吗?
  • 是的,我就是这个意思。它合并了两条边。我想展示这些边缘,因为它们是不同的颜色。

标签: r colors igraph simplify


【解决方案1】:

由于edge.curved = 0.5,边缘重叠。它使所有边都具有相同的曲率,所以如果图形被简化,它就会出现,但实际上边就在那里,只是完美地重叠。

要恢复您想要的效果,减少边缘曲线,您可以直接在igraph 对象上使用函数curve_multiple(),并将结果向量传递给edge.curve

plot(all.cnx, layout = my_layout,
     edge.color = my_edge_colors, edge.arrow.size=0.4,
     vertex.color = my_vertex_colors, vertex.size=30,vertex.frame.color="black",
     vertex.label.color="black",vertex.label.cex=0.5, vertex.label.dist=0,
     edge.curved = curve_multiple(all.cnx, .2)) # the default is 0.5

这只会在需要曲线的地方弯曲边缘,即会有重叠。如果您只是删除 edge.curved 参数,它会重置为默认值,从而导致边缘具有更大的曲率,但没有重叠。

【讨论】:

  • 非常感谢。完成!
猜你喜欢
  • 2020-09-26
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多