为 gganimate 创建的 .gif 定义大小 - 更改尺寸/分辨率

Define size for .gif created by gganimate - change dimension / resolution

我正在使用 gganimate 创建一些我想插入到我的报告中的 .gif 文件。我能够保存文件并正常查看它们,但是,我发现显示的尺寸很小:480x480。有没有一种方法可以调整它 - 也许按照 ggsave() 中的 heightwidth 参数?

我可以放大,但这对质量的影响很差,而且对于我的用例来说很难看懂。

下面是一些示例代码:

gplot <- 
  ggplot(gapminder, 
         aes(x = gdpPercap, y = lifeExp, colour = continent, 
             size = pop, 
             frame = year)) +
    geom_point(alpha = 0.6) + 
    scale_x_log10()

gganimate(gplot, "test.gif")

下面是这段代码的输出。

您可以调整常规设置:

animation::ani.options(ani.width= 1000, ani.height=1000, ani.res = 1000)

或更改每个命令的设置:

gganimate(gplot, ani.width= 1000, ani.height=1000, "test.gif")

使用gganimate包的新API,就是

library(gganimate)
library(gapminder)

gplot <- 
  ggplot(
    gapminder,
    aes(x = gdpPercap, y = lifeExp, colour = continent, size = pop)
  ) +
    geom_point(alpha = 0.6) +
    scale_x_log10() +
    transition_time(year)

magick::image_write(
  animate(gplot, width = 1000, height = 1000), 
  "test.gif"
)

使用 magick 包可能会出现问题。

我认为更好的解决方案是使用 gganimate 中的 animate() 函数创建一个对象,然后将其传递给 anim_save() 函数。无需使用其他包。

library(gganimate)
library(gapminder)

my.animation <- 
  ggplot(
  gapminder,
  aes(x = gdpPercap, y = lifeExp, colour = continent, size = pop)
 ) +
geom_point(alpha = 0.6) +
scale_x_log10() +
transition_time(year)

# animate in a two step process:
animate(my.animation, height = 800, width =800)
anim_save("Gapminder_example.gif")

虽然Thomas suggests看了一下animate,可惜文档在这方面不是很清楚

?animate 表明可以通过 ... 参数指定设备参数。您可以在 ?grDevices::png or ?grDevices::svg.

找到可用的参数

您可以通过指定res参数直接控制分辨率。并且还可以使用不同的单位。我个人喜欢以英寸为单位控制图形尺寸并以此为基础控制分辨率。 好处是对我来说,字体大小的惊喜会少很多,当然图的质量会更好。

基于示例

library(gganimate)
library(gapminder)

my.animation <-
  ggplot(gapminder, aes(x = gdpPercap, y = lifeExp, colour = continent, size = pop)) +
  geom_point(alpha = 0.6) +
  scale_x_log10() +
  transition_time(year) +
  theme_bw(base_size = 8)

animate(my.animation, height = 2,
  width = 3, units = "in", res = 150)

anim_save("gapminder_example.gif")

尺寸为 450x300 像素,符合预期。