Как исправить динамический график, сделанный в ggplot2? - PullRequest
0 голосов
/ 05 июня 2019

Я попытался реплицировать динамический график с фреймом данных:

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, Date, difftime, orhms
Дополнительно: Предупреждающие сообщения:
1: в мин. (Cl [cl! = 0]): нет не пропущенных аргументов для min;возврат Inf
2: в мин. (cl [cl! = 0]): нет не пропущенных аргументов для min;возвращая Inf

1 Ответ

0 голосов
/ 05 июня 2019

Несколько предложений:

  • добавить library(directlabels) вверху или позвонить directlabels::geom_dl.
  • transition_reveal(readr::parse_number(Year)) +, поскольку transition_reveal ожидает числовую запись, а Year - это такие символьные данные, как "Year1" и "Year2".
  • p <- ggplot(data = df..., чтобы объект ggplot / gganimate можно было анимировать на следующем шаге.

Трудно понять, работает ли это, так как это не полная информация; вы бы обычно не использовали geom_line только с одной точкой данных на группу. Возможно, вы могли бы описать больше того, что вы ищете в вопросе, и / или добавить больше данных.

...