如何在ggplot2中一起使用coord_carteisan和coord_flip

时间:2015-10-28 14:30:13

标签: r 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))

现在,我想构建一个图,其中最终产品将具有平均值的点,以及从较低的位置到uppper的线。但我希望这些线条是水平的。我也想&#34;放大&#34;在图表上,只显示从-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() 

它没有应用&#34;缩放&#34;并切换两个参数:

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)) 

应用缩放但不应用翻转。这里发生了什么?

2 个答案:

答案 0 :(得分:16)

coord_flipcoord_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))

答案 1 :(得分:3)

为同一个绘图设置多个坐标系是没有意义的。你想要coord_flip(ylim = c(-1, 1))