Wie werden Grenzwerte für Achsen in ggplot2 R-Plots festgelegt?

358

Ich zeichne folgendes:

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)

Angenommen, ich möchte nur den Bereich zwischen x=-5000bis 5000und nicht den gesamten Bereich darstellen.

Wie kann ich das machen?

David B.
quelle

Antworten:

584

Grundsätzlich haben Sie zwei Möglichkeiten

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

oder

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

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

Sie können auch die Kurzfunktion xlim(oder ylim) verwenden, mit der wie bei der ersten Option Datenpunkte außerhalb des angegebenen Bereichs entfernt werden:

+ xlim(-5000, 5000)

Weitere Informationen finden Sie in der Beschreibung von coord_cartesian.

Das RStudio-Cheatsheet für ggplot2macht dies visuell deutlich. Hier ist ein kleiner Abschnitt dieses Cheatsheets:

Geben Sie hier die Bildbeschreibung ein

Verteilt unter CC BY .

Midtiby
quelle
16
es gibt auch jetzt library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(die Standardeinstellung ist oob=censor); sehen ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker
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
1
@geotheory: trifft das auch auf den ansatz zu coord_cartesian?
Nick Stauner
1
Nein, ich hätte genauer sein sollen, nur die erste Methode
Geotheory
In der Praxis müssen Sie zum Drucken coord_cartesian(xlim = wahrscheinlich auch zurücksetzen ylimund die Etiketten- und Rasterbrüche zurücksetzen.
PatrickT
44

Kurzer Hinweis: Wenn Sie auch coord_flip()die x- und die y-Achse umdrehen, können Sie keine Bereichsgrenzen festlegen, coord_cartesian()da diese beiden Funktionen exklusiv sind (siehe hier ).

Glücklicherweise ist dies eine einfache Lösung. Setzen Sie Ihre Grenzen coord_flip()wie folgt:

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

Dies ändert nur den sichtbaren Bereich (dh es werden keine Datenpunkte entfernt).

Rechnung
quelle
Ich habe eine ähnliche, aber schwierigere Frage hier gestapelt stackoverflow.com/questions/61531149/…, wie man eine Seite NUR begrenzt
IVIM