Как установить пределы для осей на графиках ggplot2 R?

238

Я рисую следующее:

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 вместо всего диапазона.

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

Теги:
ggplot2
plot

2 ответа

377
Лучший ответ

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

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

или

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

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

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

+ xlim(-5000, 5000)

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

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

Изображение 4321

Распространяется в CC BY.

  • 14
    также есть library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish) (по умолчанию oob=censor ); см ?squish , ?censor : groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
  • 5
    NB. это может быть проблематично, если вы имеете дело с линиями / многоугольниками, где некоторые вершины находятся за пределами границ, так как весь объект удаляется из графика
Показать ещё 4 комментария
16

Быстрое примечание: если вы также используете coord_flip() для переключения оси x и y, вы не сможете установить пределы диапазона с помощью coord_cartesian(), поскольку эти две функции являются эксклюзивными (см. здесь).

К счастью, это простое решение; установите пределы в coord_flip() следующим образом:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню