2015-07-25 4 views
6

Betrachten Sie den folgenden Code ein:Wie werden bei der Facettierung von Daten in ggplot2 verschiedene Unterbrechungen und Beschriftungen auf den Skalen festgelegt?

library(ggplot2)  
data = data.frame(x = c(1, 2, 
         3, 4, 
         5, 6), 
        label = c("foo", "bar", 
          "bar", "baz", 
          "baz", "boo"), 
        type = c(1, 1, 
          2, 2, 
          3, 3)) 
ggplot(data, aes(x = x, y = c(1))) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free_x") + 
    scale_x_discrete(aes(breaks = x, labels=label), limits = 1:6) + 
    geom_point() 

es das Bild erzeugt:

image plot

Das Problem ist, dass mein scale_x_discrete() ignoriert. Ich möchte, dass die x-Skala jeder Facette die Beschriftungen in data$label zeigt, aber nur dort, wo Daten vorhanden sind. Mit anderen Worten, würde ich so etwas wie dieses mögen, aber auf einem einzigen Diagramm:

facet

facet

facet

Wie kann ich es tun?

+1

Ich denke, ein Tippfehler in Ihrem Code gibt es, um diese Diagramme zu produzieren Sie brauchen: 'ggplot (Daten, aes (x = x, y = c (1))) 'anstelle von' ggplot (Daten, aes (x = x, y = c (0))) ' – mpalanco

+0

Sie haben Recht. Ich habe den Code repariert, danke. –

Antwort

3

Unter Umständen müssen Sie die Plots separat konstruieren, so dass sie dann grid.arrange mit kombinieren:

library(ggplot2)  
data = data.frame(x = c(1, 2, 
         3, 4, 
         5, 6), 
        label = c("foo", "bar", 
          "bar", "baz", 
          "baz", "boo"), 
        type = c(1, 1, 
          2, 2, 
          3, 3)) 

library(gridExtra) # Using V 2.0.0 

p = list() 

for(i in 1:3) { 

df = subset(data, type == i) 

p[[i]] = ggplot(df, aes(x = x, y = c(1))) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    expand_limits(x = c(1, 6)) + 
    facet_wrap(~ type, ncol = 1) + 
    scale_x_continuous(breaks = df$x, labels = df$label) + 
    geom_point() 
    } 

grid.arrange(grobs = p, ncol = 1) 

enter image description here

+0

Hallo Sandy, kannst du die Grenzen auf allen x-Skalen gleich halten? Ich habe versucht, deinen Code zu ändern, aber ich konnte es nicht tun. –

+0

Ich habe die Handlung und den Code geändert. Verstehe ich diese Zeit? –

+0

Ja, genau das habe ich auch gemacht. Es scheint, als könne man mit einer einzigen Handlung nicht das machen, was wir versuchen. Ich werde deine Antwort akzeptieren. Danke für Ihre Hilfe! –

2

Ändern des Arguments in scales = "free". Ich habe das Beispiel geändert, indem ich 'y = type' anstelle der Konstante c (1) hinzugefügt habe, um verschiedene Maßstäbe zu erhalten.

ggplot(data, aes(x = x, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free") + 
    scale_x_discrete(aes(breaks = x), labels = data$label, limits = 1:6) + 
    geom_point() 

enter image description here

Verwendung scales = "free_y"

ggplot(data, aes(x = x, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free_y") + 
    scale_x_discrete(aes(breaks = x), labels = data$label, limits = 1:6) + 
    geom_point() 

enter image description here

ggplot(data, aes(x = label, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free") + 
    geom_point() 

enter image description here

+0

@nongkrong Nicht sicher, ob dies näher an der Frage ist, die das OP im Sinn hatte. – mpalanco

+0

Es gibt eine "PANEL" Variable, die Sie vielleicht verwenden können – jenesaisquoi

+0

@mpalanco danke für Ihre Antwort, aber das funktioniert nicht für mich. Nach was ich suche, ist dein erstes Diagramm, aber mit der Achse, die für jede Facette unterschiedlich bricht. Der erste sollte nur foo und bar haben, der zweite bar und baz, der dritte baz und boo. Das "y" sollte ebenfalls konstant sein. Was ich versuche zu zeigen, ist Veränderung in der Zeit. Jeder "Typ" bedeutet eine Zeit: t1, t2 und t3, und die Positionen der Daten ändern sich mit der Zeit. Sie können sehen, dass der "Balken" von 2 bei t1 zu 3 bei t2 geändert wurde und "baz" von 3 bei t2 zu 4 bei t3 geändert wurde. Deshalb müssen die Pausen auf jeder Facette unterschiedlich sein. –