防止标题 space 在使用下行字母设置动画时发生变化
Prevent title space changing when animating with descender letters
我正在尝试使用 gganimate
为一些月度数据制作动画。这些图效果很好,除了下降部分(低于基线的字母,即 g、j、p、q 和 y)改变了标题占据的 space 的数量。反过来,这会稍微移动标题的基线,从而影响动画效果。也就是说,当标题中有下部时,标题明显 "jumps" 向上一点。
一个例子:
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)
我可以 "fix" 通过使用全部大写(没有下行字母)来解决这个问题,但我不是特别喜欢这个全部大写的外观(特别是作为实际使用的较大标题的一部分案件)。我还可以在框架标题前加上已经有下行的东西,例如ggtitle("Timeperiod: ")
虽然我不想添加不相关的文本来解决这个问题(添加 "Timeperiod: " 是我现在所做的)。
我查看了 ggplot2
中关于 theme
的帮助,但我没有看到任何看起来可以解决此问题的内容。
在为标题保留 space 时,标题似乎只获取文本的高度,而不是字体的高度。
因此您可以改为使用 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 年完全重叠,月份名称的下行部分清晰可见,文本基线不变。
因此,如果您可以将您的标题放在方便的 space 情节中,您可以使用它,并在您的 gganimate
.
中使用 title_frame=FALSE
我也会考虑 bug/enhancement 向 ggplot2
报告。如果标题足够大,它实际上会影响情节:
ggplot(myDF, aes(x=x,y=y)) +geom_point()+theme(plot.title=element_text(size=rel(10),debug=TRUE)) + labs(title="y")
我正在尝试使用 gganimate
为一些月度数据制作动画。这些图效果很好,除了下降部分(低于基线的字母,即 g、j、p、q 和 y)改变了标题占据的 space 的数量。反过来,这会稍微移动标题的基线,从而影响动画效果。也就是说,当标题中有下部时,标题明显 "jumps" 向上一点。
一个例子:
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)
我可以 "fix" 通过使用全部大写(没有下行字母)来解决这个问题,但我不是特别喜欢这个全部大写的外观(特别是作为实际使用的较大标题的一部分案件)。我还可以在框架标题前加上已经有下行的东西,例如ggtitle("Timeperiod: ")
虽然我不想添加不相关的文本来解决这个问题(添加 "Timeperiod: " 是我现在所做的)。
我查看了 ggplot2
中关于 theme
的帮助,但我没有看到任何看起来可以解决此问题的内容。
在为标题保留 space 时,标题似乎只获取文本的高度,而不是字体的高度。
因此您可以改为使用 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 年完全重叠,月份名称的下行部分清晰可见,文本基线不变。
因此,如果您可以将您的标题放在方便的 space 情节中,您可以使用它,并在您的 gganimate
.
title_frame=FALSE
我也会考虑 bug/enhancement 向 ggplot2
报告。如果标题足够大,它实际上会影响情节:
ggplot(myDF, aes(x=x,y=y)) +geom_point()+theme(plot.title=element_text(size=rel(10),debug=TRUE)) + labs(title="y")