如何修复ggplot2中制作的动态图?

时间:2019-06-05 02:54:49

标签: r ggplot2 gganimate

我尝试使用数据框复制动态图:

library(tidyverse)
library(gganimate) #may need: devtools::install_github("dgrtwo/gganimate")
library(animation)

df <- data.table::fread(
  "Type       Place  Year  Month1 Month2 Units  Valor
  Segment1   City1  Year1   1      1    192345 1020
  Segment2   City2  Year2   2      14   284590 1597
  Segment3   City3  Year1   3      3    186435 3478
  Segment4   City4  Year3   4      28   269056 1259"
)

ggplot(data = df, aes(x = factor(Year), y = Valor, group = Type, colour = Type)) +
  geom_line(size = 1, show.legend = F) +
  scale_color_manual(values = c("#ff9933", "#006400", "#d11141", "#551A8B")) +
  scale_x_discrete(position = "bottom") +
  scale_y_continuous(labels = NULL)+
  labs(
    title = "NDF- SR",
    x = "Time", y = "Sales"
  ) +
  # geom_text(aes(label=scales::percent(Valor, accuracy = 1),
  # vjust= -2), show.legend = FALSE) +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_dl(aes(label = value), method = "last.points") +
  transition_reveal(Year) +
  coord_cartesian(clip = "off") +
  ease_aes("cubic-in-out")

animate(p, fps = 7, width = 900, height = 600)
anim_save("election.gif", p)

出现的错误是:

  

错误:数据沿途必须是整数,数字,POSIXct,日期,时差或orhms
  另外:警告消息:
  1:在min(cl [cl!= 0])中:没有min的必填参数;返回Inf
  2:在min(cl [cl!= 0])中:没有min的必填参数;返回Inf

1 个答案:

答案 0 :(得分:0)

一些建议:

  • 在顶部添加library(directlabels)或致电directlabels::geom_dl
  • transition_reveal(readr::parse_number(Year)) +,因为transition_reveal需要输入数字,而Year是字符数据,例如“ Year1”和“ Year2”。
  • p <- ggplot(data = df...,以便可以在下一步中对ggplot / gganimate对象进行动画处理。

由于这似乎不是完整的数据,因此很难知道它是否有效。您通常不会在每个组仅使用一个数据点的情况下使用geom_line。也许您可以在问题中描述更多您想要的东西,和/或添加更多数据。