欢迎关注R语言数据分析指南
❝本节来介绍如何使用igraph+scatterpie来绘制网络饼图,下面小编就通过一个案例来进行展示数据为随意构建无实际意义仅作图形展示用,添加了详细的注释希望各位观众老爷能够喜欢,「数据+代码已经上传2023VIP群,加群的观众老爷请自行下载」。
❞
关注下方公众号下回更新不迷路
加载R包
library(tidyverse)
library(igraph)
library(ggraph)
library(graphlayouts)
library(ggforce)
library(scatterpie)
library(ggsci)
案例一
# 设置随机种子,确保结果的可复现性
set.seed(1439)
# 使用sample_pa函数生成一个包含20个节点的随机无标度网络
g <- sample_pa(20, 1)
# 为网络中的每个节点添加名为"A"的属性,属性值为从均值为0,标准差为1的正态分布中随机生成的绝对值
V(g)$A <- abs(rnorm(20, sd = 1))
# 为网络中的每个节点添加名为"B"的属性,属性值为从均值为0,标准差为2的正态分布中随机生成的绝对值
V(g)$B <- abs(rnorm(20, sd = 2))
# 为网络中的每个节点添加名为"C"的属性,属性值为从均值为0,标准差为3的正态分布中随机生成的绝对值
V(g)$C <- abs(rnorm(20, sd = 3))
# 使用layout_with_stress函数计算节点的布局坐标
xy <- layout_with_stress(g)
# 将计算得到的节点布局坐标分别赋值给节点属性"x"和"y"
V(g)$x <- xy[, 1]
V(g)$y <- xy[, 2]
# 使用ggraph函数绘制图形,使用"manual"布局,节点的x和y坐标从属性中获取
ggraph(g, "manual", x = V(g)$x, y = V(g)$y) +
# 添加边的可视化,使用geom_edge_link0函数
geom_edge_link0() +
# 添加饼图散点,表示节点属性"A"、"B"和"C"的比例
geom_scatterpie(cols = c("A", "B", "C"),
data = as_data_frame(g, "vertices"),
colour = NA, pie_scale = 2) +
coord_fixed() + # 设置坐标系为等比例缩放
theme_graph() +
theme(legend.position = "bottom")
案例二
# 生成一个包含9个岛屿、40个节点、连接概率为0.4、平均度数为15的网络图
g <- sample_islands(9, 40, 0.4, 15)
# 使用igraph包中的simplify函数简化网络图,去除重复边和自环
g <- igraph::simplify(g)
# 为每个节点添加名为"grp"的属性,属性值为重复的1到9,每个值重复40次
V(g)$grp <- as.character(rep(1:9, each = 40))
# 为每个节点添加名为"cat"的属性,属性值从"A"、"B"、"C"中随机采样得到,有放回
V(g)$cat <- sample(c("A", "B", "C"), vcount(g), replace = TRUE)
# 合并同一组内的节点,形成新的图g_clu,并使用"concat"方式合并节点属性
g_clu <- contract(g, V(g)$grp, vertex.attr.comb = "concat")
# 为新图g_clu的边添加名为"weight"的属性,所有边的权重设置为1
E(g_clu)$weight <- 1
# 使用simplify函数简化新图g_clu,对边的属性使用"sum"方式合并
g_clu <- simplify(g_clu, edge.attr.comb = "sum")
# 根据节点属性"cat"计算每个组内各个类别("A"、"B"、"C")的数量,分别添加为"A"、"B"、"C"的属性
V(g_clu)$A <- sapply(V(g_clu)$cat, function(x)
sum(x == "A"))
V(g_clu)$B <- sapply(V(g_clu)$cat, function(x)
sum(x == "B"))
V(g_clu)$C <- sapply(V(g_clu)$cat, function(x)
sum(x == "C"))
# 使用layout_with_stress函数计算节点的布局坐标
xy <- layout_with_stress(g_clu)
# 将计算得到的节点布局坐标分别赋值给节点属性"x"和"y"
V(g_clu)$x <- xy[, 1]
V(g_clu)$y <- xy[, 2]
# 使用ggraph函数绘制图形,使用"manual"布局,节点的x和y坐标从属性中获取
ggraph(g_clu, "manual", x = V(g_clu)$x, y = V(g_clu)$y) +
# 添加边的可视化,使用geom_edge_link0函数
geom_edge_link0() +
# 添加饼图散点,表示节点属性"A"、"B"和"C"的比例,填充颜色为白色,饼图比例尺度为3
geom_scatterpie(cols = c("A", "B", "C"),
data = as_data_frame(g_clu, "vertices"),
colour = "white", pie_scale = 3) +
scale_fill_npg() +
coord_fixed() + # 设置坐标系为等比例缩放
theme_graph() +
theme(legend.position = "bottom")
❝本节介绍到此结束,有需要学习个性化数据可视化的朋友,欢迎到小编的「淘宝店铺」 「R语言数据分析指南」购买「2023年度会员文档」同步更新中「售价149元」,内容主要包括各种「高分论文的图表分析复现以及一些个性化图表的绘制」均包含数据+代码;按照往年数据小编年产出约在150+以上
❞
购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的「除系列课程外」的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询。
淘宝扫一扫
2023会员群案例展示










