在 R 中绘制网络时如何为边缘颜色创建图例?

How to create a legend for edge colors when plotting networks in R?

我生成了一个连接矩阵,表示由洋流连接的地理点网络。每个点释放被其他点接收的粒子。每个点释放和接收的粒子数汇总在这个方阵中。例如,矩阵的一个元素 Aij 对应于第 i 个点发射和第 j 个点接收的粒子数量。

我的目的是能够将其绘制为网络,使得每个点构成一个顶点,两点之间的连接构成一条边。我希望这些边缘根据交换的粒子数量具有不同的颜色。那些必须用箭头标记。

我可以根据地理坐标绘制这些点,也可以按照我想要的方式绘制这些边。我现在唯一关心的是如何添加一个图例,将边的颜色与它们所代表的粒子数量相关联。

有人可以帮我吗?到目前为止,这是我的代码:

library(ggplot2)
library(plyr)
library(sp)
library(statnet)

connectivityMatrix <- as.matrix(read.table(file='settlementMatrix001920.dat'))
coordinates <- as.matrix(read.table(file='NoTakeReefs_center_LonLat.dat'))


net <- as.network(connectivityMatrix, matrix.type = "adjacency", directed =   TRUE)

minX<-min(coordinates[,1])#-0.5
maxX<-max(coordinates[,1])#+0.5
minY<-min(coordinates[,2])#-0.5
maxY<-max(coordinates[,2])#+0.5


p<-plot(net, coord=coordinates,xlim=c(minX,maxX),ylim=c(minY,maxY),edge.col=connectivityMatrix,object.scale=0.01)    

没有你的真实数据,这里作为示例

matrixValues<-matrix(c(0,1,2,3,
                       0,0,0,0,
                       0,0,0,0,
                       0,0,0,0),ncol=4)
net<-as.network(matrixValues)
plot(net,edge.col=matrixValues)
# plot legend using non-zero values from matrix
legend(1,1,fill = unique(as.vector(matrixValues[matrixValues>0])),
     legend=unique(as.vector(matrixValues[matrixValues>0])))

您可能需要调整 legend 中的前两个坐标值,以将其绘制在绘图上您需要的位置。您还可以稍微不同地构建您的网络,以便从矩阵加载值(请参阅 as.network()ignore.eval 参数。在这种情况下,您将使用 edge.col='myValueName' 作为 plot 命令和get.edge.attribute(net,'myValueName') 将值输入 legend.