Как предотвратить xlim от изменения высоты с помощью geom_curve?

У меня есть следующий код:

library(tidyverse)
data_frame(x = 1:5, x1=x+1, c = c('a','a','a','b','b')) %>% 
      ggplot() +
      geom_curve(aes(x = x, xend= x1, y = 0, yend = 0), curvature = -1.3, alpha=.2) +
    facet_wrap(~ c, ncol=1)

введите описание изображения здесь но я хотел бы настроить границы оси y, чтобы обрезать область фона выше ~.1.

Я попытался сделать это:

data_frame(x = 1:5, x1=x+1, c = c('a','a','a','b','b')) %>% 
  ggplot() +
  geom_curve(aes(x = x, xend= x1, y = 0, yend = 0), curvature = -1.3, alpha=.2) +
  facet_grid(c ~ .) +
  ylim(0,.35) +
  facet_wrap(~ c, ncol=1)

но он просто перетаскивает арки на основе значений в ylim. Как я могу предотвратить это поведение?

Ответ 1

coord_fixed() имеет аргументы, которые позволяют вам точно контролировать то, что вы хотели бы иметь здесь.

См. также http://ggplot2.tidyverse.org/reference/coord_fixed.html для справки.

К сожалению, невозможно использовать ваши x и x1 динамическим способом внутри coord_fixed().

Пока вы произвольно добавляете абсолютные значения (0.6 и 6.4 ниже), вы можете сделать что-то вроде этого:

data_frame(x = 1:5, x1 = x+1, c = c('a','a','a','b','b')) %>%
  ggplot(.) +
  geom_curve(aes(x = x, xend = x1, y = 0, yend = 0), curvature = -1.3, alpha = .2) +
  facet_grid(c ~ .) +
  coord_fixed(ratio = 7, xlim = c(0.6, 6.4), ylim = c(0, 0.12), expand = FALSE) +
  scale_y_continuous(breaks = c(0, 0.1))

Предполагая, что это выглядит так, как бы вы хотели, чтобы он выглядел, обратите внимание, что я установил expand = FALSE для запуска ylim в ноль и добавил буферы к xlim (0.4) и верхней границе ylim.
Я изменил значение по умолчанию ratio от 1 до 7, чтобы масштабировать вас от 0,7 до 0,1, что я понимаю, что вы хотели бы иметь в конце. ratio = 1 означало бы, что у вас одинаковый масштаб (одинаковые расстояния) по оси y, как на оси x (что я считаю верным).

Наконец, мне пришлось добавить ручные разрывы для оси y (чтобы иметь меньше единиц), так что ячейки сетки были бы немного больше, что опять же является тем, что я делаю в качестве вашего возможного желания.

Ответ 2

Заменяет ли ylim(0,.35) на coord_fixed(ylim=c(0, 0.35)) то, что вы хотите?