ustaw tylko dolną granicę limitu dla ggplot

82

Czy można ustawić tylko dolną granicę limitu dla skali ciągłej? Chcę, aby wszystkie moje wykresy były oparte na 0, bez konieczności określania górnej granicy.

na przykład

+ scale_y_continuous(minlim=0)
znak
źródło

Odpowiedzi:

118

Możesz użyć expand_limits

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

Oto porównanie tych dwóch:

  • bez expand_limits

  • z expand_limits

Od wersji 1.0.0 programu ggplot2możesz określić tylko jeden limit, a drugi będzie taki, jak zostałby normalnie określony, ustawiając drugi limit na NA. Takie podejście pozwoli zarówno na rozszerzenie, jak i skrócenie zakresu osi.

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

podanie go za pomocą ylim(c(0, NA))daje identyczną liczbę.

Brian Diggs
źródło
@PatrickT Czy chodziło Ci o komentarz do stackoverflow.com/q/27028825/892313 ?
Brian Diggs
Dokładnie to, czego szukałem. Dziękuję
Veera
12

Co powiesz na używanie aes(ymin=0), jak w:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + aes(ymin=0)
Josh O'Brien
źródło
7
To zastępuje ymin dla geom_errorbar itp .; expand_limits () wydaje się bezpieczniejsza.
Mark
To nie jest powszechne, tak jak w przypadku geom_densitydaje mi Error: stat_bin() must not be used with a y aestheticlub po umieszczeniu wewnątrz geom_density, Warning: Ignoring unknown aesthetics: ymin(ten ostatni jest w pełni expected)
PatrickT
7

Możesz również wypróbować następujący kod, który da ci minimalną oś Y na zero, a także bez dodatkowej przerwy między osią x a minimalną wartością y.

scale_y_continuous(limits = c(0, NA), expand = c(0,0))
WANNISA RITMAHAN
źródło
1
Czy jest na to sposób coord_cartesian()zamiast tego?
randy
-1

Nie sądzę, że możesz to zrobić bezpośrednio. Aby obejść ten problem, możesz naśladować sposób, w jaki ggplot2 określa górną granicę:

scale_y_continuous(limits=c(0, max(mydata$y) * 1.1))
bdemarest
źródło