Setze nur die Untergrenze eines Limits für ggplot

81

Ist es möglich, nur die Untergrenze eines Grenzwerts für die kontinuierliche Skalierung festzulegen? Ich möchte alle meine Diagramme auf 0 setzen, ohne die Obergrenze angeben zu müssen.

z.B

+ scale_y_continuous(minlim=0)
Kennzeichen
quelle

Antworten:

116

Sie können verwenden expand_limits

ggplot(mtcars, aes(wt, mpg)) + geom_point() + expand_limits(y=0)

Hier ist ein Vergleich der beiden:

  • ohne expand_limits

  • mit expand_limits

Ab Version 1.0.0 von ggplot2können Sie nur ein Limit angeben und das andere so festlegen, wie es normalerweise durch Festlegen dieses zweiten Limits festgelegt wird NA. Dieser Ansatz ermöglicht sowohl das Erweitern als auch das Abschneiden des Achsenbereichs.

ggplot(mtcars, aes(wt, mpg)) + geom_point() +
  scale_y_continuous(limits = c(0, NA))

Wenn Sie es über ylim(c(0, NA))angeben, erhalten Sie eine identische Zahl.

Brian Diggs
quelle
@PatrickT Meinten Sie das als Kommentar zu stackoverflow.com/q/27028825/892313 ?
Brian Diggs
Genau das, wonach ich gesucht habe. Vielen Dank
Veera
12

Wie wäre es mit aes(ymin=0), wie in:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + aes(ymin=0)
Josh O'Brien
quelle
7
Dies überschreibt das ymin für geom_errorbar usw.; expand_limits () scheint sicherer zu sein.
Mark
Dies ist nicht universell, wie geom_densityes für mich gibt Error: stat_bin() must not be used with a y aestheticoder wenn es innerhalb des platziert geom_densitywird Warning: Ignoring unknown aesthetics: ymin(letzteres wird voll erwartet)
PatrickT
7

Sie können auch den folgenden Code ausprobieren, der Ihnen die minimale y-Achse bei Null und auch ohne die zusätzliche Lücke zwischen der x-Achse und dem minimalen y-Wert gibt.

scale_y_continuous(limits = c(0, NA), expand = c(0,0))
WANNISA RITMAHAN
quelle
1
Gibt es eine Möglichkeit, dies coord_cartesian()stattdessen zu tun ?
Randy
-1

Ich glaube nicht, dass Sie das direkt tun können. Als Workaround können Sie jedoch die Art und Weise nachahmen, wie ggplot2 die Obergrenze bestimmt:

scale_y_continuous(limits=c(0, max(mydata$y) * 1.1))
bdemarest
quelle