欢迎关注R语言数据分析指南
❝本节来介绍一款R包「roughnet」其最主要用来绘制网络图时添加纹理填充,小编测试后发现挺有趣的有多了一种图形展示方式。感兴趣的朋友欢迎分享转发,「更多详细内容请参考作者官方文档」 ❞
官方文档
❝https://github.com/schochastics/roughnet ❞
加载R包
代码语言:javascript复制remotes::install_github("schochastics/roughnet")
library(roughnet)
library(igraph)
install.packages(c("signnet","graphlayouts"))
library(signnet)
library(graphlayouts)
library(dplyr)
绘制纹理填充网络图
代码语言:javascript复制g <- make_graph("Zachary") # 创建一个名为 "Zachary" 的图形对象
V(g)$shape <- "circle" # 将图形中的节点形状设置为圆形
V(g)$shape[c(1,34)] <- "rectangle" # 将节点 1 和节点 34 的形状设置为矩形
# 根据 Louvain 社区检测算法的结果,为节点设置不同的填充颜色
V(g)$fill <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3")[membership(cluster_louvain(g))]
# 根据 Louvain 社区检测算法的结果,为节点设置不同的填充样式
V(g)$fillstyle <- c("hachure", "zigzag", "cross-hatch", "dots")[membership(cluster_louvain(g))]
V(g)$color <- "black" # 将节点的边框颜色设置为黑色
V(g)$size <- 30 # 将节点的大小设置为 30
V(g)$stroke <- 2 # 将节点的边框粗细设置为 2
E(g)$color <- "#AEAEAE" # 将边的颜色设置为灰色
# 创建一个宽度为 930,高度为 600 的 roughnet 图形
roughnet(g, width = 930, height = 600)
自定义填充形状
代码语言:javascript复制data("avatar") # 载入 "avatar" 数据集
main <- induced_subgraph(avatar, which(V(avatar)$main)) # 提取 "main" 标记的子图
w <- ifelse(E(main)$sign == 1, 3, 1) # 根据边的符号(sign)确定边的宽度
xy <- layout_with_stress(main, weights = 1/w) # 使用 stress 布局计算节点的坐标
# 将计算得到的 x 坐标赋值给节点属性 V(main)$x
V(main)$x <- xy[, 1]
# 将计算得到的 y 坐标赋值给节点属性 V(main)$y
V(main)$y <- xy[, 2]
# 根据所属派系为节点设置不同的填充颜色
V(main)$fill <- case_when(V(main)$affiliation == "earth kingdom" ~ "#8B6914",
V(main)$affiliation == "fire nation" ~ "#CD2626",
V(main)$affiliation == "water tribe" ~ "white",
V(main)$affiliation == "air nomad" ~ "#98F5FF",
TRUE ~ "grey")
# 根据所属派系为节点设置不同的边框颜色
V(main)$color <- case_when(V(main)$affiliation == "earth kingdom" ~ "#8B6914",
V(main)$affiliation == "fire nation" ~ "#CD2626",
V(main)$affiliation == "water tribe" ~ "#1874CD",
V(main)$affiliation == "air nomad" ~ "#98F5FF",
TRUE ~ "grey")
# 根据所属派系为节点设置不同的形状
V(main)$shape <- case_when(V(main)$affiliation == "earth kingdom" ~ "earth",
V(main)$affiliation == "fire nation" ~ "fire",
V(main)$affiliation == "water tribe" ~ "water",
V(main)$affiliation == "air nomad" ~ "air",
TRUE ~ "circle")
E(main)$width <- ifelse(E(main)$sign == 1, 1.2, 0.3) # 根据边的符号(sign)确定边的宽度
E(main)$color <- ifelse(E(main)$sign == 1, "#228B22", "#CD3278") # 根据边的符号(sign)确定边的颜色
V(main)$label <- V(main)$name # 将节点的名称作为标签显示
V(main)$pos <- c("n", "s", "s", "s", "s", "e", "n", "e", "s", "n") # 设置节点的位置属性
# 创建一个宽度为 600,高度为 600 的 roughnet 图形,使用 Herculanum 字体
roughnet(main, width = 600, height = 600, font = "30px Herculanum")