Некоторые примеры данных:
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
?"