2014-02-24 14 views
5

Ich habe eine Grafik g in Python-igraph. Ich kann eine VertexCluster Community-Struktur mit dem folgenden erhalten:Plotten von Gemeinden mit Python-igraph

community = g.community_multilevel() 

community.membership gibt mir eine Liste der Gruppenzugehörigkeit aller Ecken in der Grafik.

Meine Frage ist wirklich einfach, aber ich habe keine Python-spezifische Antwort auf SO gefunden. Wie kann ich den Graphen mit Visualisierung seiner Gemeinschaftsstruktur darstellen? Vorzugsweise zu PDF, so etwas wie

layout = g.layout("kk") 
plot(g, "graph.pdf", layout=layout) # Community detection? 

Vielen Dank.

Antwort

6

Sie können Ihr VertexClustering-Objekt direkt an die Plot-Funktion übergeben; Es wird stattdessen automatisch das zugrunde liegende Diagramm gezeichnet und die Farben für die Cluster automatisch ausgewählt. Das gewünschte Layout kann wie gewohnt im Argument layout = ... angegeben werden.

+0

Dank für die Verknüpfung! – jayelm

6

Vertices bleiben in der layout, bestellt und VertexCluster, so dass Sie so etwas tun:

die Zahl der Gemeinden in der Gemeinschaftsstruktur finden:

>>> max(community.membership) 
10 

Dann erstellen Sie eine Liste/Wörterbuch mit max + 1 einzigartige Farben (wahrscheinlich nicht manuell wie unten):

Dann Liste Verständnis verwenden, erstellen Sie eine Liste mit den Farben für jeden Scheitelpunkt auf der Grundlage der Gruppenzugehörigkeit von diesem Eckpunkt enthalten und weisen das zu :

plot(g, "graph.png", layout=layout, 
    vertex_color=[color_list[x] for x in community.membership]) 

Ergebnis (es ist so schön!)

graph

3

Ein schöner Weg, um die Gemeinden zeichnen könnten folgende Verwendung mark_groups sein:

Beispiel:

from igraph import * 
import random 

random.seed(1) 

g = Graph.Erdos_Renyi(30,0.3) 
comms = g.community_multilevel() 

plot(comms, mark_groups = True) 

Daraus ergibt sich wie folgt zusammen:

enter image description here