Как использовать cop_carteisan и coord_flip вместе в ggplot2

У меня есть странное поведение от ggplot. Здесь MWE:

the_data <- data.frame(
   myx <- 1:10,
  lower <- rnorm(10,-5,1),
  mean <- rnorm(10,0,.5),
  upper <- rnorm(10,5,1))
the_data2 <- data.frame(
  myx <- 1:10,
  lower <- rnorm(10,-5,1),
  mean <- rnorm(10,0,.5),
  upper <- rnorm(10,5,1))

Теперь я хочу построить график, в котором у конечного продукта будет точка для среднего значения, и строка, взятая из нижней в верхнюю. Но я хочу, чтобы эти линии были горизонтальными. Я также хочу "увеличить масштаб" на графике, чтобы были показаны только значения от -1 до 1. Мне нужно использовать coord_cartesian, потому что, если я использую ylim, он отбрасывает точки данных, которые находятся за пределами графика, что испортит строки. Но когда я запускаю:

ggplot() +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data) +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data2) +
  coord_cartesian(ylim = c(-1, 1)) +
  coord_flip() 

он не применяет "масштабирование" и не переключает два аргумента:

ggplot() +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data) +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data2) +
  coord_flip() +
  coord_cartesian(ylim = c(-1, 1)) 

применяется масштабирование, но не перевертывание. Что здесь происходит?

Ответ 1

coord_flip - обертка вокруг coord_cartesian. Вы выполняете два вызова coord_cartesian со второй перезаписью первой. Вы можете сделать это:

ggplot() +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data) +
  geom_pointrange(aes(x=myx, y=mean, ymin=lower, ymax=upper), data=the_data2) +
  coord_flip(ylim = c(-1, 1))

Ответ 2

Нет смысла иметь несколько систем координат для одного и того же графика. Вы хотите coord_flip(ylim = c(-1, 1))