【问题标题】:Prevent title space changing when animating with descender letters使用下降字母制作动画时防止标题空间发生变化
【发布时间】:2017-08-23 05:52:03
【问题描述】:

我正在尝试使用 gganimate 为一些月度数据制作动画。这些图工作得很好,除了下降(低于基线的字母,即 g、j、p、q 和 y)的存在改变了标题占用的空间量。反过来,这会稍微移动标题的基线,这会减损动画效果。也就是说,当标题中有降序时,标题会明显“跳跃”一点。

一个例子:

myDF <-
  data.frame(
    Date = seq(as.Date("2015-01-15")
               , as.Date("2015-12-15")
               , "1 month")
    , x = 1:12
    , y = 1:12
  )

myDF$frame <-
  factor(format(myDF$Date, "%Y-%b")
         , levels = paste0("2015-", month.abb))

toAnimate <-
  ggplot(
    myDF
    , aes(x = x
          , y = y
          , frame = frame)
  ) +
  geom_point() +
  theme_gray()

gganimate::gganimate(toAnimate)

使用旧版本的gganimate 问题更加明显(并且不需要包含年份来演示),因为它移动了情节而不是标题:

gganimate::gg_animate(toAnimate)

我可以通过使用所有大写字母(没有下降)来“解决”这个问题,但我并不特别喜欢所有大写字母的外观(尤其是作为实际用例的较大标题的一部分)。我还可以在框架标题前面加上已经有下降器的东西,例如ggtitle("Timeperiod: ") 虽然我宁愿不添加不相关的文本来解决这个问题(添加“时间段:”是我现在所使用的)。

我查看了ggplot2 中的theme 帮助,但没有看到任何可以解决此问题的内容。

【问题讨论】:

  • 您尝试过更新 gganimate 吗?最新版本已将功能gg_animate 替换为gganimate。我无法用较新的版本重现下降问题。
  • 谢谢@aosmith。我刚刚更新,问题现在更加微妙(到了可能不是问题的地步)。但是,更新现在似乎导致标题的基线移动(这比情节区域的变化要好,但仍然不理想)。当标题中有月份的线索时,问题就不那么微妙了,所以我稍微调整了情节(包括年份)以使其更容易看到。

标签: r ggplot2 gganimate


【解决方案1】:

在为标题保留空间时,标题似乎只获取文本的高度,而不是字体的高度。

因此,您可以改用geom_text 在情节中的某处放置标题。例如,如果我这样做:

ggplot(myDF, aes(x=x,y=y, label=frame)) +
   geom_point()+theme_gray() + 
   geom_text(x=2.5,y=5,aes(label=frame),adj=0)

(就像一个 ggplot,还没有动画......)我可以看到所有 2015 年的完全重叠,月份名称的后缀明显存在,文本基线是恒定的。

因此,如果您可以将标题放在情节的方便位置,您可以使用它,并在您的gganimate 中使用title_frame=FALSE

我还会考虑向ggplot2 提交错误/增强报告。如果标题足够大,它实际上会踩到情节:

ggplot(myDF, aes(x=x,y=y)) +geom_point()+theme(plot.title=element_text(size=rel(10),debug=TRUE)) + labs(title="y")

【讨论】:

  • 这是一个可靠的解决方法,并且有很大的帮助。在实践中,我正在制作的情节非常复杂(方面、因素等),使用geom_text 作为标题解决方法并不理想。有趣的是,“错误”(?)可能在于ggplot2 对空间预留的处理。但是,我不确定这个用例是否足以证明重新组织它的合理性。已投票,但我将暂时不接受,看看是否有解决该问题的答案(我对此表示怀疑,因为我认为您的解释排除了这一点)。
  • 如果有某种方法可以在标题中添加不可见的“y”,那可能会起作用...我也看不到任何element_text 选项来修复高度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 2014-04-27
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多