R语言绘制社会网络图
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 效率分析专题
作者:郑晓雪 (南开大学)
邮箱:1547241075@qq.com
目录
1. 简介
2. 社会网络基本原理
3. 命令介绍
3.1 layout 布局
3.2 颜色选择
3.3 节点设置
3.4 线条设置
4. 命令实操
4.1 固定节点、线条设置
4.2 属性节点、权重线条设置
5. 参考文献
6. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 简介
社会网络图是对网络关系的图示形式,节点间有联系则为 1 (有线条),无联系则为 0 (无线条)。一些文章中也使用社会网络图表示特定的关系,如以线条的粗细表现权重,节点大小和颜色表示某些属性等。因此,美观又承载多种信息的社会网络图可以为文章添色。本篇文章主要讲述如何用 R 画出具有更多信息的社会网络图。
2. 社会网络基本原理
社会网络的学术研究最早出现于 20 世纪早期,主要指以节点与节点之间的联系所构成的集合。社会网络中有两种基本要素,节点 (社会网络中的主体) 和线条 (节点之间的关系)。社会网络分析的精髓之处在于,从网络成员之间的关联角度出发,能够将分析视角扩展至社会现象乃至社会结构 (Borgatti 和 Foster,2003)。
例如,全球价值链的嵌入使得国际贸易网络更加复杂。双边贸易数据只能够有效表征存在直接贸易的地区之间的经济联系,而不能综合反映共同参与这个贸易链条的世界上其他国家 (地区) 所处的角色与地位。因此通过建立世界贸易网络,并对网络中各项基本特征进行细致刻画,便能够有效地补充传统的贸易研究方法的缺陷 (Albert 和 Barabási,2002) 。
3. 命令介绍
本文主要从网络图的 layout 布局、颜色选择、线条设置、节点设置等方面进行介绍。
3.1 layout 布局
layout 布局主要分为两种:一种是设置成特定形状的网络图,这种网络图除线条粗细、节点大小的特定设置表示的意义外无实际意义;另一种是基于各种算法的优化,这些算法主要目的是均匀分布节点,使边长度均匀,最小化边交叉,保持节点不太靠近边等。占据中心位置的节点一般也是联系较为密切的节点,即越靠近中心位置,该节点的中心性越强,在网络中的结构影响力就越大。
但第二类图多适用于小型网络,大型网络的关联更加复杂,分析其节点位置可以选择其他方式。形状特征的网络图命令主要有:layout_in_circle
(节点分布在圆上)、layout_on_grid
(节点分布构成矩形)、layout_on_sphere
(节点分布构成圆)、layout_randomly
(随机分布)。
算法生成的网络图命令主要有:layout_with_fr
(Fruchterman-Reingold 算法,用的最多)、layout_with_kk
(kk算法)、layout_with_lgl
、layout_ with_sugiyama
、layout_with_mds
、layout_with_graphopt
等。
3.2 颜色选择
R 语言支持广泛的颜色和颜色功能。不带输入参数的 colors()
命令返回 R 中所有可用颜色的列表。目前,有 657 种颜色,颜色可以通过三种方式实现:字符名称 (例如红色、橙色、黄色),3 位 RGB 值 (例如 255 0 0、265 155 0、255 255 0),以及十六进制字符串 (例如 #FF0000、#FFA500、#FFFF00)。
本文社会网络绘图中,#FFA500、red 等颜色可以直接替换,RGB 颜色可以通过 rgb()
函数将 RGB 三元组转换为十六进制三元组,如 rgb(255, 165, 0, maxColorValue = 255)
。其中 (255,165,0)
是橙色的 RGB 三元组,maxColorValue = 255
表示我们所用的每个 RGB 各有 256 级亮度。
3.3 节点设置
节点有两种设置:一是固定大小,二是根据某些节点属性设置不同的颜色、大小等。
V(g1)$size <- 10 # 固定大小的节点设置
V(g1)$color <- "green" # 固定颜色的节点设置
V(g1)$label.color <- 'red'
V(g1)$label.cex <- 0.5 # 标签的字号大小设置
V(g1)$label.dist<- 0.5 # 标签和节点错开的距离
# 根据不同属性设置不同节点大小、颜色
V(g1)$size <- V(g1)$leixing # 根据属性设置节点大小,与固定大小节点选一即可
colrs <- c("gray", "red", "orange", "blue", "yellow") # 将不同类型分别配置不同颜色
V(g1)$color <- colrs[V(g1)$leixing] # 根据不同组别设置颜色
3.4 线条设置
E(g1)$width <- 0.01 # 固定线条的宽度设置
E(g1)$label <- NA # 选择无标签
E(g1)$arrow.size=0.001 # 箭头大小设置
E(g1)$color<-"#FFA500" # 线条颜色设置
# 根据权重设置线条宽度
E(g1)$width <- E(g1)$export/90000 # 根据出口量设置不同的线条宽度
4. 命令实操
本文将以 2019 年 HS8541 类半导体产业出口贸易的前 58 个国家 (地区) 贸易量作为样本绘制社会网络图,数据来源为 Uncomtrade。
4.1 固定节点、线条设置
setwd("C:/Users/Desktop/mm") # 设置路径
library(stats)
library(igraph)
edge <- read.csv("425.csv")
vertices<-read.csv("4255.csv")
g1 <- graph_from_data_frame(edge, directed = T,vertices = vertices)
set.seed(2) # 生成随机数,这样图的布局就会可重复
m<-layout_on_sphere(g1) # 设置图的布局方式为圆形
V(g1)$size <- 5 # 节点大小
V(g1)$color <- "orange" # 设置颜色
V(g1)$label.color <- 'red' # 设置节点标记的颜色
V(g1)$label.cex <- 0.5 # 设置节点标记的颜色
V(g1)$label.dist <- 1 # 节点与标签的距离
E(g1)$width <- 0.01 # 根据边宽度
E(g1)$label <- NA # 根据频次列设置边标签
E(g1)$arrow.size=0.001 # 设置箭头大小
E(g1)$color<-"black"
# 生成图
plot(g1, layout=m)
上图为固定节点颜色、固定线条宽度、固定节点大小、圆形布局的社会网络图,图中的线条可以显示双边连接,但图显示的信息有限。
4.2 属性节点、权重线条设置
setwd("C:/Users/Desktop/mm") # 设置路径
library(stats)
library(igraph)
edge <- read.csv("425.csv")
vertices<-read.csv("4255.csv")
g1 <- graph_from_data_frame(edge, directed = T,vertices = vertices)
set.seed(2) # 生成随机数,这样图的布局就会可重
m<-layout_on_sphere(g1) # 设置图的布局方式为圆形的布局
V(g1)$size <- degree(g1)/10 # 节点大小与点中心度成正比,中心度即与该点相连的点的总数
colrs <- c("gray", "red", "orange", "blue", "yellow")
V(g1)$color <- colrs[V(g1)$leixing] # 根据不同组别设置颜色,按照类型分组
V(g1)$label.color <- 'red' # 设置节点标签的颜色
V(g1)$label.cex <- 0.5 # 设置节点标签的字号
V(g1)$label.dist <- 1 # 设置节点标签与节点的距离
E(g1)$width <- E(g1)$export/200000000 # 根据权重设置边宽度
E(g1)$label <- NA
E(g1)$arrow.size=0.001 # 设置箭头大小
E(g1)$color<-"black" # 设置线条颜色
# 生成图
plot(g1, layout=m)
在上图中,节点的颜色代表不同洲别的国家 (地区),大洋洲、欧洲、美洲、非洲、亚洲的颜色分别为灰色、红色、橙色、蓝色和黄色。节点的大小表示该节点在网络中的中心度大小。图中显示中国大陆、中国台湾、中国香港、美国、德国、英国、法国、芬兰、韩国、比利时、菲律宾、印度尼西亚、意大利、瑞士、印度、奥地利、马来西亚等国家 (地区) 在半导体HS 8541类出口贸易中中心度较高,在网络中与其他国家 (地区) 的贸易联系更加密切。
线条与该国在 HS8541 类半导体中出口量成正比,图中显示印度、印度尼西亚、中国大陆、中国台湾、中国香港、新加坡、菲律宾、马来西亚等国家 (地区) 在HS 8541类产品中的贸易量较大。
5. 参考文献
网络数据的统计分析:R 语言实践 -Link- Fruchterman T M J, Reingold E M. Graph drawing by force‐directed placement[J]. Software: Practice and experience, 1991, 21(11): 1129-1164. -PDF- Kamada T, Kawai S. An algorithm for drawing general undirected graphs[J]. Information processing letters, 1989, 31(1): 7-15. -PDF- Sugiyama K, Tagawa S, Toda M. Methods for visual understanding of hierarchical system structures[J]. IEEE Transactions on Systems, Man, and Cybernetics, 1981, 11(2): 109-125. -PDF-
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 网络, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:Stata教程 Stata:社会网络分析 专题:Stata命令 Stata:社会网络分析命令-nwcommands 专题:Stata资源 Stata帮助和网络资源汇总(持续更新中) 专题:回归分析 Stata:时变参数的网络分析-nwxtregress 专题:其它 人工神经网络与Stata应用
课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页:https://gitee.com/lianxh/YGqjp
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。