2016-05-20 8 views
3

Я пытался построить график, используя ggnet2. Для этого я использую следующий код:Цвет по степени в R с помощью ggnet2

library(igraph) 
lapply(c("sna", "intergraph", "GGally", "igraph", "network"), require, character.only=T) 
data <- read.table('CA-CondMat.txt',sep="\t",header=TRUE) 
g = graph.data.frame(data, directed = TRUE) 
N = vcount(g) 
E = ecount(g) 
perc = 0.1 
d.g = degree(g,mode='all')/N 
new_nodes = sample.int(N,ceiling(perc*N),replace=FALSE,prob =d.g) 
new_g = subgraph(g,new_nodes) 
dg = degree(g,mode='all') 
prob = dg/sum(dg) 
png('example_plot2.png') 
ggnet2(new_g, size = "degree", node.color = "steelblue", size.cut = 4, 
              edge.size = 1, edge.color="grey") 
dev.off() 

и я получаю полностью синий график.

Я пользуюсь пакетом igraph.

То, что я хочу, чтобы сюжет представляет собой график с цветом из узлов в зависимости от их степени, как это: enter image description here

Ссылка на файл:
https://snap.stanford.edu/data/ca-CondMat.html

Edit:

Полный пример добавлен

+2

Вам нужно предоставить [воспроизводимый пример] (http://stackoverflow.com/questions/59 63269/пример практического примера) с образцами входных данных. Это облегчит вам помощь. – MrFlick

+0

Это все еще не воспроизводится, потому что у нас нет данных для его запуска (у нас нет доступа к «CA-CondMat.txt»). Вы должны предоставить данные способами, описанными в исходной ссылке, которую я изначально предоставил. – MrFlick

+0

Я добавил файл – totoedrm

ответ

7

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

В моем коде clr-degree есть одна половина степени, так как этот файл имеет только симметричные ссылки и это выглядело довольно скучно без черных и зеленых узлов.

Я также добавил префиксы для библиотек для всех вызовов, чтобы я мог видеть, что было использовано из сетевой библиотеки (igraph, network и т. Д.). В этих библиотеках много перекрытий и взаимозависимостей.

Примечание Этот код должен карта clr-degree в 0-1 в black, степень 2 в red, степень 3 к green и >=4 к red:

library(ggplot2) 
library(igraph) 
library(GGally) 

# the following libraries will be required too - used internally 
lapply(c("sna", "scales","intergraph", "network"),require, character.only=T) 

set.seed(1234) 

# data from https://snap.stanford.edu/data/ca-CondMat.html 
data <- read.table('CA-CondMat.txt',sep="") 

g = igraph::graph.data.frame(data, directed = TRUE) 
N = vcount(g) 
E = ecount(g) 
d.g = igraph::degree(g,mode='all')/N 

# Use new smaller subgraph 
perc = 0.05 
new_nodes = sample.int(N,ceiling(perc*N),replace=FALSE,prob =d.g) 
new_g = igraph::subgraph(g,new_nodes) 
dg = igraph::degree(new_g,mode='all') 

dg <- dg/2 # for some reason there are only even degrees in this file - so we divide by 2 

clrvek = pmax(0,pmin(dg,4)) 
clrnames = c("0"="lightgrey","1"="black", "2"="blue", "3"="green", "4"="red") 

#png('example_plot2.png') 
GGally::ggnet2(new_g, 
     color.legend="clr-degree",palette=clrnames,color=clrvek, 
     size = "degree", 
     edge.size = 1, edge.color="grey", 
     legend.position = "bottom") + coord_equal() 
#dev.off() 

Уступая:

enter image description here

+0

Я уже понял что-то подобное. Теперь я пытался улучшить его, разделив узлы с помощью 'size.cut' и давая каждой группе определенный цвет, но я просто не могу понять, как это сделать. – totoedrm

+0

Ну, можете ли вы отметить это как правильное (как он отвечает на вопрос), а затем спросить новый? Вот как должно работать SO. –