【问题标题】:How to create a legend for edge colors when plotting networks in R?在 R 中绘制网络时如何为边缘颜色创建图例?
【发布时间】:2019-11-24 01:24:54
【问题描述】:

我生成了一个连接矩阵,表示由洋流连接的地理点网络。每个点释放被其他点接收的粒子。每个点释放和接收的粒子数汇总在这个方阵中。例如矩阵的一个元素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)    

【问题讨论】:

  • 它是基础图形,所以你可以使用legend
  • 谢谢,我想是这样,但我不知道如何在图例中指定边缘的颜色。我对 R 很陌生,以前没有做过类似的事情。谢谢你的帮助。

标签: r plot


【解决方案1】:

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

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' 作为绘图命令并使用get.edge.attribute(net,'myValueName') 来提供值到legend

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多