使用下降字母

时间:2017-03-29 16:02:38

标签: r ggplot2 gganimate

我正在尝试使用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)

enter image description here

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

gganimate::gg_animate(toAnimate)

enter image description here

我可以通过使用所有大写字母(没有下行程序)来“解决”这个问题,但我并不特别喜欢所有大写的外观(特别是作为实际用例的较大标题的一部分)。我也可以用已经有下行器的东西预先添加帧标题,例如ggtitle("Timeperiod: ")虽然我不想添加不相关的文本只是为了解决这个问题(添加“Timeperiod:”就是我现在所用的)。

我已查看了themeggplot2的帮助,但我没有看到任何看起来会解决此问题的内容。

1 个答案:

答案 0 :(得分:2)

在为标题预留空间时,标题看起来只会得到文字的高度,而不是字体的高度。

所以你可以使用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年完全重叠,月份名称的下降显然在那里,文本基线是不变的。

因此,如果您可以将标题放在图表上的方便空间中,则可以使用该标题,并在title_frame=FALSE中使用gganimate

我还会考虑向ggplot2提交错误/改进报告。如果你使标题足够大,它实际上是在剧情上踩踏:

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

enter image description here