встановити лише нижню межу обмеження для ggplot


82

Чи можна встановити лише нижню межу межі для безперервного масштабу? Я хочу зробити всі свої графіки 0 на основі без необхідності вказувати верхню межу.

напр

+ scale_y_continuous(minlim=0)

Відповіді:


118

Можна використовувати expand_limits

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

Ось порівняння двох:

  • без expand_limits

  • з expand_limits

Починаючи з версії 1.0.0 ggplot2, ви можете вказати лише одне обмеження, а інше має бути таким, як це зазвичай визначається, встановивши для цього другого обмеження значення NA. Цей підхід дозволить як розширити, так і скоротити діапазон осей.

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

вказавши його через, ylim(c(0, NA))вийде ідентична цифра.


@PatrickT Ви мали на увазі це як коментар до stackoverflow.com/q/27028825/892313 ?
Брайан Діггз,

Саме те, що я шукав. Дякую
Веера

12

Як щодо використання aes(ymin=0), як у:

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

7
Це замінює ymin для geom_errorbar тощо; expand_limits () здається безпечнішим.
Марк

Це не є універсальним, оскільки geom_densityце дає мені Error: stat_bin() must not be used with a y aestheticабо коли його поміщають всередину geom_density, Warning: Ignoring unknown aesthetics: ymin(останнє цілком очікується)
PatrickT

7

Ви також можете спробувати наступний код, який дасть вам мінімальну вісь y рівною нулю, а також без зайвого зазору між віссю x та мінімальним значенням y.

scale_y_continuous(limits = c(0, NA), expand = c(0,0))

1
Чи є спосіб зробити це coord_cartesian()замість цього?
Ренді

-1

Я не думаю, що ви можете зробити це безпосередньо. Але в якості опрацювання ви можете імітувати спосіб, яким ggplot2 визначає верхню межу:

scale_y_continuous(limits=c(0, max(mydata$y) * 1.1))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.