2016-05-20 19 views
3

Ich habe versucht, ein Diagramm mit ggnet2 zu plotten. Dazu benutze ich den folgenden Code:Farbe nach Grad in R mit 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() 

und ich bekomme eine komplett blaue Grafik.

Ich benutze das Paket igraph.

Was ich Plot wollen, ist ein Diagramm mit der Farbe der Knoten basierend auf dem Grad wie diese: enter image description here

Link zur Datei:
https://snap.stanford.edu/data/ca-CondMat.html

Edit:

Vollständiges Beispiel hinzugefügt

+2

Sie müssen stelle ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/59 63269/how-to-make-a-great-r-reproduzierbar-Beispiel) mit Beispiel-Eingabedaten. Dies wird es Ihnen leichter machen, Ihnen zu helfen. – MrFlick

+0

Dies ist immer noch nicht reproduzierbar, da wir keine Daten haben, um es auszuführen (wir haben keinen Zugriff auf "CA-CondMat.txt"). Sie sollten Daten auf eine Weise bereitstellen, die in dem von mir ursprünglich angegebenen Link beschrieben wird. – MrFlick

+0

Ich habe die Datei – totoedrm

Antwort

7

Ich schätze eine Herausforderung, und Diagramme sind immer fu n. Ich denke, das ist, was Sie wollen (Ich änderte mein Original, um die Datei zu verwenden, die Sie später zur Verfügung gestellt, als ich daran arbeitete):

In meinem Code clr-degree ist eine Hälfte des Grades, da diese Datei nur symmetrische Links und hat es sah ohne die schwarzen und grünen Knoten eher langweilig aus.

Ich habe auch Bibliothek Präfixe zu allen Anrufen hinzugefügt, so dass ich sehen konnte, was von welcher Netzwerk-Bibliothek (igraph, Netzwerk, etc) verwendet wurde. In diesen Bibliotheken gibt es viele Überschneidungen und Abhängigkeiten.

Hinweis: dieser Code clr-degree-0-1 zu black, Grad 2-red, Grad 3-green und >=4 zu red Karte sollte:

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() 

Nachgeben:

enter image description here

+0

Ich hatte schon so etwas herausgefunden. Jetzt habe ich versucht, es zu verbessern, indem ich die Knoten mit "size.cut" teile und jeder Gruppe eine bestimmte Farbe gebe, aber ich kann einfach nicht verstehen, wie das geht. – totoedrm

+0

Nun, können Sie dies als richtig markieren (wie es die Frage beantwortet), und dann fragen Sie einen neuen? So soll SO funktionieren. –