2015-01-19 1 views
2

Я создал матрицу связности, передающую сеть географических точек, связанных океанскими течениями. Каждая точка освобождает частицы, полученные другими. Количество частиц, высвобождаемых и получаемых каждой точкой, суммируется в этой квадратной матрице. Например, элемент Aij матрицы соответствует количеству частиц, испускаемых i-й точкой и полученным j-м.Как создать легенду для цветов краев при построении сетей в R?

Моя цель - построить это как сеть, чтобы каждая точка составляла вершину, а связи между двумя точками составляли ребро. Я бы хотел, чтобы эти края имели разные цвета в зависимости от количества частиц, которые были заменены. Они должны быть отмечены стрелкой.

Я мог бы нарисовать эти точки в соответствии с их географическими координатами, и я мог бы начертить эти края так, как я хотел. Моя единственная проблема заключается в том, как добавить легенду о цвете ребер с количеством частиц, которые они представляют.

Может ли кто-нибудь помочь мне с этим? Вот мой код до сих пор:

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)  

Благодарим Вас заранее,

+0

Это базовая графика, поэтому вы можете использовать 'legend'. – hrbrmstr

+0

Спасибо, я полагаю, это не так, но я не понимаю, как указать цвет ребер в легенде. Я совершенно новый с R и не сделал ничего подобного раньше Спасибо за помощь. – user3584444

ответ

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, чтобы нарисовать его там, где вам нужно. Кроме того, можно построить свою сеть несколько иначе, так что значения были загружены в из матрицы (см ignore.eval аргумента as.network(). В этом случае вы должны использовать edge.col='myValueName' для команды участка и get.edge.attribute(net,'myValueName') кормить ценности в legend.

+0

Спасибо за этот ответ. Это именно то, что мне нужно. – user3584444

Смежные вопросы