Как установить пределы для осей на графиках 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, а не во всем диапазоне.

Как я могу это сделать?

Дэвид Б
источник

Ответы:

585

В основном у вас есть два варианта

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

или

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

Где первый удаляет все точки данных за пределами данного диапазона, а второй корректирует только видимую область. В большинстве случаев вы не увидите разницы, но если вы подгоните что-либо к данным, это, вероятно, изменит соответствующие значения.

Вы также можете использовать сокращенную функцию xlim(или ylim), которая, как и первая опция, удаляет точки данных за пределами заданного диапазона:

+ xlim(-5000, 5000)

Для получения дополнительной информации проверьте описание coord_cartesian.

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

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

Распространяется по ГКБ .

midtiby
источник
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. это может быть проблематично, если вы имеете дело с линиями / многоугольниками, в которых некоторые вершины находятся за пределами границ, так как весь объект удаляется из графика
geotheory
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))

Это просто изменяет видимый диапазон (т.е. не удаляет точки данных).

Билл
источник
Похожий, но более
сложный