从 2mode 边缘列表 (.csv) 到第三个属性的彩色边缘

时间:2021-03-17 15:13:19

标签: r igraph

我正在使用包含公司和项目的 .csv 数据库处理网络图。我可以制作网络图,显示所有这些公司是如何通过他们的项目联系起来的(一家公司从事多个项目)。我的 .csv 数据库如下所示:

<头>
项目名称 公司名称
项目 1 A 公司 2020
项目 1 B公司 2020
项目 1 公司C 2020
项目 2 A 公司 2021
项目 2 公司C 2021
项目 2 公司 D 2021

我正在使用矩阵和矩阵乘法的转换来生成邻接图,但是使用这种转换,年份列丢失了(我在导入时将其切断)。如何制作连接公司合作的网络图,并用彩色边显示他们合作的项目年份(2 个 4 年块)?

我目前将此用于包含所有年份的“正常”网络图:

PrintSomething()

非常感谢您和我一起思考,我以前从未使用过 R,制作第一个图表花了我很多时间!

2 个答案:

答案 0 :(得分:0)

默认情况下,邻接矩阵只允许您为每个单元格存储一个值。如果您想从整洁/长数据框中获得多个观察结果(即多个年边)图形是一个更简单的选择。 在这个例子中,我还使用了 {ggraph()},它是一个方便的包,通过图形方法的语法来绘制网络图。

library(tidyverse)
library(igraph)
library(ggraph)


df <- data.frame(project = c("p1", "p2", "p3", "p2", "p3", "p4"), 
       company = c("A", "B", "C", "A", "C", "D"), 
       year = c(2020, 2020, 2020, 2021, 2021, 2021))

igraph::graph_from_data_frame(df, directed = FALSE) %>%
  ggraph() + 
  geom_edge_arc(aes(colour = as.factor(year))) +
  geom_node_label(aes(label = name)) + 
  theme_graph()

enter image description here

答案 1 :(得分:0)

下面代码给出的输出怎么样?

graph_from_data_frame(twomode_edgelist) %>%
  set_edge_attr("color", value = as.factor(twomode_edgelist$Year)) %>%
  set_edge_attr("label", value = twomode_edgelist$Year) %>%
  plot()

enter image description here