1

我对 R 很陌生,并且遇到以下问题:

我正在 Twitter 上研究比利时的政治家,并想看看 Twitter 上的政党内部是否形成了任何网络。

我有两个数据文件

  • 包含政治家是否关联的矩阵文件 (politicixpolitici.csv)
  • 包含具有相应拳头、姓名、政党、twitterhandle 和议会的所有政客的文件
    (data.csv)

我想创建一个显示网络的图表,但节点由其政党着色(此变量在 data.csv 文件中称为“fractie”)。

我试过这样做如下:

首先,我尝试按如下方式组合文件:

rownames(politicicsv) <- politicicsv[,'TwitterHandle']
test <- cbind(politicixpolitici, 
              politicicsv[, "Fractie"][match(rownames(politicixpolitici), 
                                             rownames(politicicsv))])

=> 我已经绘制了这个网络,但它出来的时候非常草率,而且名字也在那里,这使得很难看到 + 节点显然没有根据派对着色。

然后,我使用 statnet 进行了尝试,但是当我想创建图形时,我在创建顶点属性时遇到了麻烦:

fractie <- get.vertex.attribute(politicicsv, "Fractie") 

Error in get.vertex.attribute(politicicsv, "Fractie") : 
  get.vertex.attribute requires an argument of class network.

有人可以帮我绘制这个网络,节点根据他们所属的政党(“Fractie”)着色吗?

文件可以在这里找到

谢谢,这对我的论文有帮助。

4

1 回答 1

1

有人可以帮我绘制这个网络,节点根据他们所属的政党(“Fractie”)着色吗?

你可以这样做

df <- read.csv("data.csv") 
m <- as.matrix(read.csv2("politicixpolitici.csv", row.names = 1))
library(igraph)
g <- simplify(graph_from_adjacency_matrix(m))
# Color palette:
(pal <- setNames(
  colorRampPalette(categorical_pal(8))(nlevels(df$Fractie)), 
  levels(df$Fractie)) ) 
#         CD&V    Ecolo-Groen          Groen           N-VA Onafhankelijke 
#    "#E69F00"      "#81ADA3"      "#33ABB9"      "#18A56E"      "#C0D64B" 
#     Open vld       Open Vld           sp.a             VB  Vlaams Belang 
#    "#77AB7A"      "#2A6D8E"      "#BF5F11"      "#CF6E64"      "#BC82A2" 
# Vuye&Wouters 
#    "#999999" 
V(g)$color <- pal[df$Fractie[match(V(g)$name, df$TwitterHandle)]]
set.seed(1); coords <- layout_with_fr(g)
plot(g, 
  layout=coords, vertex.label.cex=.2, vertex.size=2, 
  edge.arrow.size=0, edge.lty="blank", asp = 0)

或尝试交互式情节:

library(visNetwork)
visIgraph(g) %>% 
  visIgraphLayout(layout="layout.norm", layoutMatrix = coords, type = "full")

总而言之,我建议将您的图表导出到 gephi 并在那里交互式地尝试其他布局和可视化。

于 2017-05-21T12:29:54.637 回答