2017-12-18 9 views
-1

In der Hoffnung, dass ihr mir helfen könnt, versuche ich verzweifelt, ein Diagramm zu erstellen, das dem hier angehängten ähnlich ist.Verhaltensdiagramm in R/ggplot2 möglich?

proposed graph

Die vollständige vertikale Balken stellen Erfahrung in allen Bereichen geteilt (und wahrscheinlich die Ereignisse in den einzelnen Bereichen triggern). Ich entschuldige mich für den Mangel an Farbe in der Handlung. Für meine aktuellen Zwecke sind die Beschriftungen nicht wichtig, es ist nur wichtig, dass ich sie später hinzufügen kann.

Hier sind einige Beispieldaten. Ich bin derzeit alle vertikalen Balken als „Bewegung One“ und alle kleineren Bars als „Bewegung Two“ Etikettieren Dinge so klar zu halten, wie ich kann:

move_one <- 
    data.frame(
    start = c(10 , 1000, 3000) 
    , end = c(250, 1500, 4500) 
    , label = "Movement One" 
) 

move_two <- 
    data.frame(
    ind = rep(1:3, each = 3) 
    , start = c(275, 1600, 3800 
       , 20, 1010, 3010 
       , 240, 1400, 4400) 
    , end = c(295, 1750, 4400 
       , 30, 1700, 3600 
       , 290, 1800, 4500) 
    , label = "Movement Two" 
) 

Geben

start end  label 
1 10 250 Movement One 
2 1000 1500 Movement One 
3 3000 4500 Movement One 

und

ind start end  label 
1 1 275 295 Movement Two 
2 1 1600 1750 Movement Two 
3 1 3800 4400 Movement Two 
4 2 20 30 Movement Two 
5 2 1010 1700 Movement Two 
6 2 3010 3600 Movement Two 
7 3 240 290 Movement Two 
8 3 1400 1800 Movement Two 
9 3 4400 4500 Movement Two 

bzw. (diese tun nicht Spiel die Hand gezeichnete graph hier).

+1

Könnten Sie mindestens zwei verschiedene Farben verwenden, entsprechend der Bewegung 1 und Bewegung 2. Es ist auch schwer zu verstehen, was die vertikale „Bänder“ entsprechen. Und bitte, entferne die Witze von der Frage. – dmi3kno

+0

Entschuldigung, es ist nicht sehr klar, ich war in einem Zug mit nur einem Stift leider so versucht, Diagonale und horizontale Schattierung zu tun, um den Unterschied zu zeigen - zugegebenermaßen ist dies nicht klar. die vertikalen Balken beziehen sich auf eine von zwei Bewegungen (Bewegung 1 = diagonale Schattierung, Bewegung 2 = horizontale Schattierung). Die horizontalen Balken sind Beispiele dafür, wann ein Bereich in einer Szene betrachtet wurde und im Wesentlichen wollte ich die zwei Datensätze überlagern. Was Witze angeht, bin ich mir nicht sicher, worauf Sie sich beziehen. – James

+0

Ich werde einen Stich in die Bearbeitung der Frage nehmen, aber Sie sollten nicht bearbeiten, um die zugrunde liegende Frage zu ändern (von der grundlegenden Grafik zu einem bestimmten Aspekt). Jetzt, da Sie eine Basis haben, stellen Sie eine neue Frage, um das Detail (und die Verbindung zwischen den beiden) zu verfolgen. –

Antwort

2

"Das ist R. Es gibt kein wenn. Nur wie." -Simon Blomberg

Grundsätzlich müssen wir nur jede Komponente einzeln an ggplot übergeben. Zuerst verwenden wir geom_rect, um die darunter liegenden vertikalen Balken zu erstellen. Fügen Sie dann die horizontalen Linien für jeden Bereich mit geom_hline hinzu. Schließlich fügen Sie die kleinen Kästen oben mit einem anderen geom_rect hinzu. Polnisch mit Achsenbeschriftungen und anderen Themeneinstellungen, die Sie von dort möchten.

ggplot() + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = 0 
     , ymax = 4) 
    , move_one 
) + 
    geom_hline(aes(yintercept = ind) 
      , move_two) + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = ind - 1/3 
     , ymax = ind + 1/3) 
    , move_two 
) + 
    xlab("Time (milliseconds)") + 
    ylab("Area") 

Gibt

enter image description here

+0

Danke für das Mark, es gab mir die Motivation und Inspiration, die ich brauchte, um dieses Projekt ein letztes Mal zu versuchen. Ich habe mit deinem Beispiel herumgespielt, aber ich wollte nur einige Teile des Codes klären. Würde ich in ind = rep (1: 3, jeweils = 3) 1: 3 ändern, um die Anzahl der Bereiche zu erhöhen? Ich habe ~ 37. Auch was erreicht jedes = 3? Auf jeder Linie des Gebiets gibt es derzeit 3 ​​grüne Blöcke, ist es damit verbunden? In meinen tatsächlichen Daten wird es eine unterschiedliche Anzahl von grünen Blöcken in jeder Zeile geben. Zur Zeit versuche ich Textlabels auf der Y-Achse anstatt 0,1,2..loving ggplot2 zu haben! – James

+0

Ich gehe davon aus, dass Sie die Daten irgendwo schon in der Hand haben. Wenn Sie es digitalisieren (d. H. Von Papieraufzeichnungen transkribieren), würde ich ** nicht ** die Daten in R eingeben - I würde die Daten als ein CSV speichern (z. B. in LibreOffice, Google Tabellen oder Excel).Um zu sehen, was jeder Teil des Codes macht, führe sie separat aus ('each' sagt' rep', wie oft in einer Zeile jede Komponente des Vektors wiederholt wird; mit 'mal' wird stattdessen der ganze Vektor mehrmals wiederholt). Die Eingabe von echten Daten wird schnell unordentlich (und fehleranfällig). –

+0

Für Datenbeschriftungen * * können Sie einen Faktor als Y-Achse verwenden. Es wird jedoch schwieriger, die vertikalen Balken dahinter zu steuern. Stattdessen würde ich den Faktorindex verwenden (die Nummer, die mit der Faktorstufe verknüpft ist) und dann die Skala so ändern, dass Ihre Beschriftungen angezeigt werden. z.B. 'scale_x_continuous (Pausen = 1: Länge (Ebenen (move_two $ ind)), Labels = Ebenen (move_two $ ind))' –