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

How to fix a dynamic graph made in ggplot2?

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

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)

出现的错误是:

Error: along data must either be integer, numeric, POSIXct, Date, difftime, orhms
In addition: Warning messages:
1: In min(cl[cl != 0]) : no non-missing arguments to min; returning Inf
2: In min(cl[cl != 0]) : no non-missing arguments to min; returning Inf

几点建议:

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

很难知道这是否有效,因为这似乎不是完整的数据;您通常不会使用 geom_line 每组只有一个数据点。也许您可以在问题中描述更多您要查找的内容,and/or 添加更多数据。