创建图形(网络分析 R)?
Create graph (network analysis R)?
我是 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") 着色?
可以找到文件here
谢谢,这对我的论文很有帮助。
Can someone help me in plotting this network, with the nodes colored
according to the political party ("Fractie") they belong to?
你可以这样做
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 并在那里以交互方式试验其他布局和可视化。
我是 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") 着色?
可以找到文件here
谢谢,这对我的论文很有帮助。
Can someone help me in plotting this network, with the nodes colored according to the political party ("Fractie") they belong to?
你可以这样做
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 并在那里以交互方式试验其他布局和可视化。