我想用R创建一个类似于所附的网络可视化图。现有的edgelist包含列“From”和“To”,单独的数据框“nodeInfo”包含有关节点名称、大小、纬度和经度的信息。请帮助创建符合以下条件的图表:
1、基于边列表创建网络可视化图。每个节点的大小应与“nodeInfo$size”中的值成比例。2、如果在edgelist中有重复的“From”和“To”的组合,则在两个节点之间显示多条边(例如:使用诸如弯曲边缘的技术)。3,在图中包括分离株。隔离点是存在于“nodeInfo”中但未在边缘列表中提及的节点。4、根据“nodeInfo$longitude”和“nodeInfo$latitude”值在实际Map上放置节点。使用简单且免费的Map服务,适合学术目的,而不依赖于Google Maps API等付费服务。
set.seed(42)
nodes <- LETTERS[1:9]
from <- sample(nodes, 7, replace = TRUE)
to <- sample(nodes, 7, replace = TRUE)
edgelist <- data.frame(from, to)
nodeInfo <- data.frame(
name = nodes,
size = sample(1:10, 9, replace = TRUE),
longitude = runif(9, min = 135, max = 145),
latitude = runif(9, min = 30, max = 40)
)
字符串
我使用“sna”包创建了一个网络,使用下面的代码,但我不能将其覆盖在Map上,我也不能执行更复杂和详细的任务。如果有更好的方法使用其他包,我真的很感激。
library(sna)
edgeNet <- network(edgelist, matrix.type = "edgelist", loops = TRUE, directed = FALSE, vertices = nodeInfo, multiple = T)
gplot(edgeNet,xlab="EXample",edge.col ="blue", vertex.col="gray",vertex.cex=nodeInfo$size, usearrows=F, edge.lwd = 0.5, edge.lty = "solid",displaylabels=T,label.cex=0.6)
型
1条答案
按热度按时间mmvthczy1#
如果您迁移到
tidygraph
/ggraph
生态系统,您将拥有大量的绘图选项。首先,从
ggmap::get_stamenmap
(一个免费服务)获取Map,并将其转换为长格式 Dataframe 。我们将选择一个简单的线条图,使一个干净,现代的图形:字符串
现在,使用节点数据框和边列表创建图形。与其在日本Map上使用随机点,不如使用三个城市。
型
很容易将节点数据和边列表转换成一个整洁的图:
型
最后,我们将绘制图形,确保首先将Map添加为栅格图层。
型
x1c 0d1x的数据
有许多可自定义的选项。我们可以选择不同类型的雄蕊图,如“地形-背景”,以及不同的方式来连接节点:
的