Як встановити обмеження для осей на графіках ggplot2 R?


358

Я закладаю наступне:

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)

Тепер припустимо, що я тільки хочу , щоб побудувати область між x=-5000до 5000, а не у всьому діапазоні.

Як я можу це зробити?

Відповіді:


584

В основному у вас є два варіанти

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

або

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

Якщо перший видаляє всі точки даних поза заданим діапазоном, а другий лише коригує видиму область. У більшості випадків ви б не бачили різниці, але якщо ви щось підходите до даних, це, ймовірно, змінить відповідні значення.

Ви також можете скористатися функцією скорочення xlim(або ylim), яка, як і перший варіант, видаляє точки даних за межами заданого діапазону:

+ xlim(-5000, 5000)

Для отримання додаткової інформації ознайомтеся з описом coord_cartesian.

RStudio шпаргалка для ggplot2робить це абсолютно ясно візуально. Ось невеликий розділ цього шаблону:

введіть тут опис зображення

Поширюється під CC BY .


16
є також зараз library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(за замовчуванням є oob=censor); см ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Бен Bolker

5
NB. це може бути проблематично, якщо ви маєте справу з лініями / полігонами, де деякі вершини знаходяться поза межами, оскільки весь об’єкт видалений із ділянки
геотерія

1
@geotheory: це теж стосується coord_cartesianпідходу?
Нік Стаунер

1
Ні, я не повинен був бути більш конкретним, тільки перший метод
геотеорія

На практиці, для 'друку', coord_cartesian(xlim = вам, мабуть, потрібно також скинути ylimі скинути етикетки та обриви сітки.
PatrickT

44

Швидка примітка: якщо ви також використовуєте coord_flip()для перегортання осі x і y, ви не зможете встановити межі діапазону, використовуючи, coord_cartesian()оскільки ці дві функції є ексклюзивними (див. Тут ).

На щастя, це легко виправити; встановіть свої ліміти приблизно coord_flip()так:

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

Це просто змінює видимий діапазон (тобто не видаляє точки даних).


Я подібне, але важче запитання, розміщене тут stackoverflow.com/questions/61531149/… про те, як обмежити один
САЙТ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.