2014-06-11 2 views
8

Ich versuche, einen Weg zu finden, grafische Darstellungen wie diese direkt in R erstellen (wie manuell mit Inkscape Gegensatz zu zeichnen, nachdem ich die Analyse in R getan habe):Gibt es eine Möglichkeit, schöne "Flusskarten" oder "Linienbereich" -Diagramme in R zu erstellen?

line flow 1 und line flow 2

Die Das erste scheint so zu sein, als ob es einfach sein sollte, aber ich bin nicht in der Lage, etwas zu finden, das meinen Bedürfnissen entspricht ... das zweite ist viel komplizierter, aber es scheint auch so zu sein, dass machbar sein sollte. Dieser Eintrag Graph flow chart of transition from states bringt mich ungefähr so ​​nah (es ist schon irgendwie toll, außer dass ich nicht unbedingt eine quadratische Matrix habe, und ich möchte einen Anfangs-/Endort für meine Zeilen mit Kontrolle über Dicke und Alpha basiert auf meinen eigenen Daten) ...

Ist es möglich, dies mit ggplot (oder vielleicht etwas anderes wie Gitter, wenn es nett aussieht) zu tun?

+1

Möglicherweise: http://blog.revolutionanalytics.com/2013/02/visualizing-networks-in-r-arc-diagrams-and-hive-plots.html und http://drunks-and-lampposts.com/2013/01/03/lazy-d3-auf-einige-astronomische-daten/ –

+0

Für die linke ..wahrscheinlich [diese] (http://stackoverflow.com/questions/16112162/graph-flow-chart-of -transition-from-states/16113802 # 16113802) – agstudy

+0

@Tyler - wirklich wie das arcdiagram-Paket - danke, dass du mich darauf hingewiesen hast! – CJH

Antwort

11

Hier ist ein Beispiel, um auf der linken Grafik mit Basisgrafiken zu beginnen (es gibt xspline Funktionen für Rastergrafiken sowie wenn Sie diese verwenden möchten, ich weiß nicht, wie Sie sie mit ggplot2, aber wahrscheinlich Gitter wäre nicht zu hart):

plot.new() 
par(mar=c(0,0,0,0)+.1) 
plot.window(xlim=c(0,3), ylim=c(0,8)) 
xspline(c(1,1.25,1.75,2), c(7,7,4,4), s=1, lwd=32.8/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(6,6,4,4), s=1, lwd=19.7/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(5,5,4,4), s=1, lwd=16.5/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(4,4,4,4), s=1, lwd=13.8/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(3,3,4,4), s=1, lwd= 7.9/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(2,2,4,4), s=1, lwd= 4.8/4.5, border="#0000ff88", lend=1) 
xspline(c(1,1.25,1.75,2), c(1,1,4,4), s=1, lwd= 4.5/4.5, border="#0000ff88", lend=1) 

text(rep(0.75, 7), 7:1, LETTERS[1:7]) 
text(2.25, 4, 'Tie strength') 

enter image description here

Und einige Startcode für das rechte Diagramm ein wenig anderen Ansatz:

plot.new() 
par(mar=rep(0.1,4)) 
plot.window(xlim=c(0,7), ylim=c(-1,7)) 
text(3+0.05, 0:6, 0:6, adj=0) 
text(4-0.05, 0:6, 0:6, adj=1) 
lines(c(3,3),c(0-strheight("0"), 6+strheight("6"))) 
lines(c(4,4),c(0-strheight("0"), 6+strheight("6"))) 

xspline(c(3,1,3), c(0,3,6), s= -1, lwd=1, border="#00ff0055", lend=1) 
xspline(c(3,1.25,3), c(0,2.5,5), s= -1, lwd=4, border="#00ff0055", lend=1) 
xspline(c(4,4.5,4), c(5,5.5,6), s= -1, lwd=5, border="#ff000055", lend=1) 

enter image description here

Sie können die Kontrollpunkte, Farben usw. ändern, um näher an das zu kommen, was Sie wollen. Viele der Stücke könnten dann in eine Funktion eingewickelt werden, um einen Teil des Platzierens zu automatisieren.

+0

Großartig - dieses Def fängt mich an! Sehr geschätzt. – CJH

Verwandte Themen