2016-05-04 11 views
0

Mit dem igraph-Paket in R, bin ich auf das folgende unerwartete Verhalten gekommen. Wenn die edge.arrow.mode für eine Grafik (in meinem Fall ungerichtet, aber es macht keinen Unterschied) als 3 (oder "<->", Pfeile an beiden Enden) angegeben wird, und die edge.color als rgb() mit Option alpha < 1 angegeben wird, werden die Pfeile differentiell gefärbt. Es sieht so aus, als ob sich an einem Ende zwei Pfeilspitzen befinden und die Überlappung eine dunklere Farbe erzeugt.Unerwartete Pfeilfarbe Verhalten mit halbtransparenten Kanten (igraph, R)

Dies ist unerwünscht, da das Diagramm einige Pfeile als dunkler (die "wichtiger" aussehen) als andere zeigt. Der eigentliche Graph, den ich zu visualisieren versuche, ist ungerichtet, die Pfeile an den Enden der (alle grauen, halbtransparenten) Kanten würden nur verwendet, um zu veranschaulichen, wie viele Verbindungen ein bestimmter Vertex hat (der Graph ist ziemlich groß (100-500) Vertices), mit überlappenden Kanten, so dass es nicht einfach ist, visuell zu bestimmen, wo eine Kante mit einem Scheitelpunkt verbunden ist, was auch der Grund ist, halbtransparente Kanten und Scheitelpunkte zu verwenden.

Hier sind einige Arbeitsbeispiele:

library("igraph") 
plot(make_tree(5, mode="undirected"), vertex.size=10, edge.arrow.mode=3, edge.color=rgb(0,0,0,0.2)) 
plot(make_tree(5, mode="undirected"), vertex.size=10, edge.arrow.mode=3, edge.color=rainbow(5, alpha=0.3)) 

enter image description here

Die Frage ist, ist es eine Möglichkeit, diese um, so die Pfeile alle aussehen würde das gleiche? Die Anzahl (und vorzugsweise die "Richtung") der Verbindungen der Scheitelpunkte kann visuell auch auf andere Weise angezeigt werden (aber beachten Sie, dass die Scheitelpunktfarbe (Vollfarbspektrum) bereits für eine andere visuelle Hilfe verwendet wird, und ...) Vertex Kantenfärbung darüber würde die Dinge zu Regenbogenfarben machen. Das Verändern der Eckenform, um den Grad der Verbundenheit anzugeben, ist auch keine gute Lösung (Bearbeiten - dank Tad). Es wäre auch gut, alle Pfeilspitzen zu einer Vollfarbe zu machen (aber es scheint keine Möglichkeit zu bestehen, die Pfeilfarbe getrennt von der Kantenfarbe zu ändern).

(Bonus: ist das ein Bug oder ein Feature von IGRAPH?)

Antwort

0

Könnten Sie einfach Vertex Größe ändern Knotengrad basierend auf?

grph <- make_tree(5, mode="undirected") 
plot(grph, vertex.size=degree(grph)*5, edge.arrow.mode=0, 
    edge.color='black') 

graph

Es ist auch möglich, die Dicke der Kanten (edge.width) zu ändern, die eine Vorstellung von Knotenfestigkeit in einem gewichteten Netzwerk geben könnte. Dies gilt jedoch nicht wirklich.

Bearbeiten: Was ist mit der Änderung des Alpha-Kanals der Farbe, so dass mehr transparente Knoten einen kleineren Grad haben? Ansonsten bin ich ratlos. Pfeile auf einen ungerichteten Graphen zu setzen, erscheint im Allgemeinen als eine schlechte Idee, besonders wenn es nur ein Mittel ist, um den Grad des Knotens zu visualisieren.

colShift <- function(x, alpha){ 
         x <- col2rgb(x)/255 
         rgb(x[1], x[2], x[3], alpha=alpha) 
        } 

grph <- make_tree(5, mode="undirected") %>% 
     set_vertex_attr('color', value='dodgerblue4') 

vertAlpha <- 1.1 - 1/degree(grph) 
vertColor <- colShift(vertex_attr(grph, 'color'), vertAlpha) 

V(grph)$color <- vertColor 

plot(grph, vertex.size=degree(grph)*5, edge.arrow.mode=0, 
    edge.color='black') 

enter image description here

+0

Es ist für kleinere Netzwerke und ohne Etiketten funktionieren würde, aber ich habe 100-500 Ecken, und jede Ecke hat eine kurze Bezeichnung (immer) aus drei Ziffern besteht. Durch das Verändern der Größe der Scheitelpunkte bleiben die Beschriftungen bei weniger verbundenen Scheitelpunkten teilweise außerhalb der Scheitelpunktform, was ich vermeiden möchte (und die Größe des Textes könnte sie unlesbar machen), während superverbundene Scheitelpunkte zu viel von dem bereits vorhandenen Scheitelpunkt abdecken würden verstopftes Netzwerk Grundstück. Ich werde die Frage bearbeiten, um diese Einschränkung einzuschließen. – user3554004

+0

Kommentar zum Bearbeiten.Danke, dass du dir weitere Ideen ausgedacht hast. Leider würde Scheitel Alpha in meinem Fall nicht gut funktionieren, da die Scheitelfarbe informativ ist. Ich verwende alle drei Werte von 'rgb()', also würde ein niedriger Alpha-Wert auf einem weißen Hintergrund einen Vertex fälschlicherweise so aussehen lassen, als hätte er eine helle Farbe (oder Werte nahe 1 auf allen drei Farbkanälen). Da das Netzwerk soziale Beziehungen darstellt, sind keine Pfeile oder beide Pfeile semantisch äquivalent; Das ist kein Problem. Beide Enden müssten nur äquivalent aussehen. – user3554004

Verwandte Themen