Как установить разные пределы масштаба для разных аспектов? - PullRequest
25 голосов
/ 25 ноября 2010

Некоторые примеры данных:

dfr <- data.frame(
  x = rep.int(1:10, 2),
  y = runif(20),
  g = factor(rep(letters[1:2], each = 10))
)

Простая диаграмма рассеяния с двумя гранями:

p <- ggplot(dfr, aes(x, y)) + 
  geom_point() +
  facet_wrap(~ g, scales = "free_y")

Я могу установить пределы оси для всех панелей с помощью

p + scale_y_continuous(limits = c(0.2, 0.8))

(или оболочка для этого типа ylim)

но как установить разные пределы оси для разных фасетов?

Решительный способ сделать это - передать список этому аргументу, например,

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5)))

К сожалению, это просто выдает ошибку в случае ggplot2.

EDIT:

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

Модифицированный набор данных:

dfr <- data.frame(
  x = rep.int(1:10, 2),
  y = runif(20),
  g = factor(rep(letters[1:2], each = 10)),
  ymin = rep(c(-0.6, 0.3), each = 10),
  ymax = rep(c(1.8, 0.5), each = 10)
)

Обновлен сюжет:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax))

Теперь весы разные, а левый правильный. К сожалению, правая шкала не сжимается, поскольку ей нужно освободить место для очков.

В случае, если это поможет, теперь мы можем перефразировать вопрос как «можно ли рисовать точки без пересчета шкал и без явного вызова scale_y_continuous

Ответы [ 2 ]

5 голосов
/ 25 ноября 2010

Я не думаю, что это возможно в ggplot2. Это обсуждение от января предполагает, что проблема находится на рассмотрении.

0 голосов
/ 04 февраля 2015

Чтобы уменьшить масштаб на левом графике, удалите точки, которые находятся за пределами диапазона.Например, это уменьшит шкалу y на правом графике до значений от 0 до 0,5:

p <- ggplot(dfr, aes(x, y)) +   
     geom_point(subset=.(g == "a" | (y > 0 & y <.5))) +
     geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) +
     facet_wrap(~ g, scales = "free_y")

См. Также мой ответ на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...