前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络可视化R包-geomnet

网络可视化R包-geomnet

作者头像
作图丫
发布2022-03-28 15:39:16
1.3K0
发布2022-03-28 15:39:16
举报
文章被收录于专栏:作图丫作图丫

geomnet是一个基于ggplot2可视化图形和网络的R包,它使用sna包计算网络布局,并且包含了使用ggplot2绘制圆的geom_circle函数。

一、geomnet绘图

代码语言:javascript
复制
install.packages('geomnet')
library(dplyr)
library(geomnet)
data(theme_elements)
#theme_elements 分为两组子集,分别edges和vertices,edges中包含child和parent这两列

#数据整理:
TEnet <- fortify(as.edgedf(theme_elements$edges[,c("parent", "child")]),
                 theme_elements$vertices)
#as.edgedf:将数据映射到edgedf
#fortify:将网路边的数据转换为geomnet使用的格式
代码语言:javascript
复制
#计算节点的度:
TEnet <- TEnet %>% group_by(from_id) %>%   
        mutate(degree = sqrt(10 * n() + 1))
#%>%是dplyr包中的管道函数,把左件的值发送给右件,并作为右件表达式函数的第一个参数
#mutate函数是添加新的列,将新增变量放在数据集的最后面

1. 例一

代码语言:javascript
复制
ggplot(data = TEnet,
       aes(from_id = from_id, to_id = to_id)) +
geom_net(layout.alg = "fruchtermanreingold",
         #layout.alg是布局使用的算法,有"kamadakawai","fruchtermanreingold","circle",
         aes(fontsize = degree), directed = TRUE,
         #根据节点度调整节点字的大小
         #边有方向
         labelon = TRUE, size = 1, labelcolour = 'black',
         #labelon给节点添加标签,调整大小和颜色
         ecolour = "grey70", arrowsize = 0.5,
         #ecolour是边的颜色
         #arrowsize调整箭头大小
         linewidth =0.5, repel = TRUE
         #linewidth是边的宽度
         #repel如果为TRUE,则使用ggrepel包geoms而不是ggplot2 geoms绘制节点标签。
         ) +
  theme_net() +
  xlim(c(-0.05, 1.05)) +
  ggtitle("layout.alg = fruchtermanreingold") + 
   #加标题
  theme(plot.title = element_text(lineheight=1, face="bold",hjust = 0.5)) 
   #调整标题

2. 例二

代码语言:javascript
复制
library(geomnet)
data(blood)
ggplot(data = blood$edges, aes(from_id = from, to_id = to)) +
  geom_net(colour = "darkred", layout.alg = "circle", labelon = TRUE,
           size = 15, directed = TRUE, vjust = 0.5, labelcolour = "grey80",
           arrowsize = 1.5, linewidth = 0.5, arrowgap = 0.05,
           #arrowgap 箭头到节点的距离
           selfloops = TRUE, ecolour = "grey40") +
           #selfloops,是否显示循环,若是,则在相应节点附近画一个圆,默认为FALSE
           theme_net()

3. 例三

http://www.stats.ox.ac.uk/~snijders/siena/siena_datasets.htm

获取示例数据

代码语言:javascript
复制
library(geomnet)
head(hp.edges)
代码语言:javascript
复制
head(football$vertices)
代码语言:javascript
复制
hp.all <- fortify(as.edgedf(hp.edges), hp.chars, group = "book")
#使用name1作为from节点列,使用name2作为to节点列。
#如果这是不正确的,则重写dat,以使前两列分别为from和to节点。
#分别通过from_id和name连接边缘和节点信息。
#仅绘制给定书中具有任何连接的字符。

ggplot(data=hp.all, aes(from_id = from, to_id = to_id)) +
  geom_net(fiteach=T, directed = T, size = 3, linewidth =0.5,
#网络图是否分别安装在每个面板中
           ealpha =0 .5, labelon = T, fontsize = 3, repel = T,
           labelcolour = "black", arrowsize = .5, singletons = FALSE,
#没有其他联系(度为0)的节点是否绘制,默认为TRUE
           aes(colour = house, group = house, shape = gender)) +
# 根据house分颜色,house分组,gender分形状
  scale_colour_manual(values = c("#941B08","#F1F31C",
                                 "#071A80", "#154C07")) +
  facet_wrap(~book, labeller = "label_both") +  
  theme_net() +
  theme(panel.background = element_rect(colour = 'black'))

二、与ggplotly包共用

plotly是交互式绘图展示方法

1. 例一

绘制后,将鼠标放置在图中的节点或者边上,会提示节点/边的详细信息

代码语言:javascript
复制
library(geomnet)
library(plotly)

data(blood)  
#blood是geomnet自带数据
bloodnet <- fortify(as.edgedf(blood$edges), blood$vertices)

p <- ggplot(data = bloodnet, aes(from_id = from_id, to_id = to_id))
p2 <- p + geom_net(aes(size=Predominance, colour=type, shape=rho, linetype=group_to),
                   linewidth=0.75, labelon =TRUE, directed = TRUE, labelcolour="black") +
  facet_wrap(~Ethnicity) +  
  #分面
  scale_colour_brewer(palette="Set2")  
  #主题颜色
  ggplotly(p2)

2. 例二

绘制后,将鼠标放置在图中的节点或者边上,会提示节点/边的详细信息。右上方是工具栏。

代码语言:javascript
复制
data(football)  #football是geomnet自带数据
ftnet <- fortify(as.edgedf(football$edges), football$vertices)  
#合并数据
gg <- ggplot(data = ftnet,aes(from_id = from_id, to_id = to_id)) +
    geom_net(layout.alg = 'fruchtermanreingold',
             aes(colour = value, group = value,
             linetype = factor(same.conf != 1)),
           linewidth = 0.5,
           size = 5, vjust = -0.75, alpha = 0.3) +
#alpha是节点的Alpha透明混合处理,取值范围0至1
  theme_net() + 
   #移除背景
  theme(legend.position = "bottom") +  
   #图例位置
  scale_colour_brewer("Conference", palette = "Paired")  +  
  #分组赋值颜色
  guides(linetype = FALSE)  
  #guides,是否移除图例
ggplotly(gg)

小编总结:

除了Cytoscape软件以外,我们也可使用geomnet包来绘制网络图,而且这种交互式展示方法可用于数据库的设计中,美观且功能性强,大家可以借鉴哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档