2010-11-25 6 views
24

Einige Datenabtastwert:Wie legen Sie unterschiedliche Skalengrenzen für verschiedene Facetten fest?

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)) 
) 

Eine einfache Streudiagramm mit zwei Facetten:

p <- ggplot(dfr, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ g, scales = "free_y") 

I die Achsengrenzen für alle Platten mit

p + scale_y_continuous(limits = c(0.2, 0.8)) 

(oder einer Umhüllung für diesen Satz kann wie ylim)

aber wie stelle ich di ein verschiedene Achsengrenzen für verschiedene Facetten?

Der latticey Weg, es zu tun wäre, wirft

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5))) 

zum Beispiel Leider gibt es in dem ggplot2 Fall einen Fehler, dass nur eine Liste auf dieses Argument zu übergeben.

EDIT:

Hier ist ein Teil-Hack. Wenn Sie den Bereich der Maßstäbe erweitern möchten, können Sie Ihrem Dataset Spalten hinzufügen, die die Grenzwerte angeben, und sie dann mit geom_blank zeichnen.

Modified-Datensatz:

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)), 
    ymin = rep(c(-0.6, 0.3), each = 10), 
    ymax = rep(c(1.8, 0.5), each = 10) 
) 

Aktualisiert Grundstück:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) 

nun die Waage unterschiedlich sind und die linke Hand ist richtig. Leider kontrahiert die rechte Skala nicht, da sie Platz für die Punkte schaffen muss.

Falls es hilft, können wir die Frage wie folgt umformulieren: "Ist es möglich, Punkte zu zeichnen, ohne dass die Skalen neu berechnet werden und ohne explizit scale_y_continuous aufzurufen?"

Antwort

5

Ich glaube nicht, dass dies noch in ggplot2 möglich ist. Diese discussion von Januar schlägt vor, dass das Problem in Betracht gezogen wird.

+0

Danke für den Link. Nicht ganz die Antwort, auf die ich gehofft hatte. –

+0

@Ritchie: Überprüfen Sie mit Hadley, er könnte etwas in den Entwicklungsversionen von ggplot2 in Arbeit haben –

0

Um die Skala auf dem linken Diagramm zu verkleinern, entfernen Sie die Punkte, die außerhalb des Bereichs liegen. Z.B.

p <- ggplot(dfr, aes(x, y)) + 
    geom_point(subset=.(g == "a" | (y > 0 & y <.5))) + 
    geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) + 
    facet_wrap(~ g, scales = "free_y") 

Siehe auch meine Antwort auf diese question: dies wird die y-Skala auf der rechten Seite Grundstück auf Werte zwischen 0 und 0,5 reduzieren.

Verwandte Themen