【问题标题】:How to prevent xlim from changing the height using geom_curve?如何防止 xlim 使用 geom_curve 改变高度?
【发布时间】:2018-02-23 23:38:02
【问题描述】:

我有以下代码:

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 中的值重新调整拱门。如何防止这种行为?

【问题讨论】:

  • 似乎geom_curve 调用curveGrob .. 但default.units 的默认参数是"npc" .. 这可能是重新缩放的原因.. 不幸的是,我不能想办法通过geom_curve 传递这个参数,所以你将不得不直接处理curveGrob ...你可能对thisthis 感兴趣
  • 您的代码摘录不会产生第一个粘贴的图。你有+ facet_wrap(~c, ncol=1) 或其他东西吗?另外,您是否在顶部致电library(tidyverse)?明确将有助于回答者
  • @arvi1000 谢谢我修好了

标签: r ggplot2


【解决方案1】:

coord_fixed() 的参数可让您精确控制您想要在这里拥有的内容。

另请参阅http://ggplot2.tidyverse.org/reference/coord_fixed.html 以供参考。

不幸的是,您无法在coord_fixed() 中以动态方式使用您的xx1

只要您可以输入绝对值(下面的0.66.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】:

    coord_fixed(ylim=c(0, 0.35)) 替换ylim(0,.35) 是否符合您的要求?

    【讨论】:

    • 如果我使用 ~.7 而不是 .35 它对我有用,因为我没有将变量映射到 y 轴,因此它在视觉上可以满足我的需要。但是,它仍然会重新调整我的足弓高度,这对我来说有点奇怪。
    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多