2010-08-31 11 views
249

ich plotten folgendes:Wie werden Grenzwerte für Achsen in ggplot2 R-Plots eingestellt?

library(ggplot2)  

carrots <- data.frame(length = rnorm(500000, 10000, 10000)) 
cukes <- data.frame(length = rnorm(50000, 10000, 20000)) 
carrots$veg <- 'carrot' 
cukes$veg <- 'cuke' 
vegLengths <- rbind(carrots, cukes) 

ggplot(vegLengths, aes(length, fill = veg)) + 
geom_density(alpha = 0.2) 

Nun sage ich den Bereich zwischen x=-5000-5000, statt den gesamten Bereich nur darstellen möchten.

Wie kann ich das tun?

Antwort

418

Grundsätzlich haben Sie zwei Möglichkeiten

scale_x_continuous(limits = c(-5000, 5000)) 

oder

coord_cartesian(xlim = c(-5000, 5000)) 

Wenn die erste alle Datenpunkte außerhalb des angegebenen Bereichs entfernt und der zweite stellt nur den sichtbaren Bereich. In den meisten Fällen würden Sie den Unterschied nicht sehen, aber wenn Sie etwas an die Daten anpassen, würde es wahrscheinlich die angepassten Werte ändern.

Sie können auch die Kurzschreibweise verwenden Funktion xlim (oder ylim), die wie die erste Option Datenpunkte außerhalb des angegebenen Bereichs entfernt:

+ xlim(-5000, 5000) 

Weitere Informationen erhalten Sie die Beschreibung von coord_cartesian.

Die RStudio cheatsheet für ggplot2 macht dies recht deutlich visuell. Hier ist ein kleiner Abschnitt dieser Spickzettel:

enter image description here

Distributed unter CC BY.

+12

gibt es auch jetzt 'Bibliothek (Skalen); ... + scale_x_continuous (limits = c (-5000, 5000), oob = squish) '(der Standardwert ist' oob = censor'); siehe '? squish','? censor': https://groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU –

+5

NB. Dies kann problematisch sein, wenn Sie mit Linien/Polygonen arbeiten, bei denen einige Scheitelpunkte außerhalb der Grenzen liegen, da das gesamte Objekt aus dem Plot entfernt wird. – geotheory

+0

@geotheory: Gilt das auch für den Ansatz "coord_cartesian"? –

18

Kurzer Hinweis: Wenn Sie auch coord_flip() verwenden, um die X- und die Y-Achse zu spiegeln, können Sie keine Bereichsgrenzen unter Verwendung von coord_cartesian() festlegen, da diese beiden Funktionen exklusiv sind (siehe here).

Glücklicherweise ist dies eine einfache Lösung; setzen Sie Ihre Grenzen innerhalb coord_flip() etwa so:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400)) 

Dies ändert nur den sichtbaren Bereich (das heißt nicht entfernen Datenpunkte).