удалите прямую линию и установите метку / заголовок на имя месяца вместо номера, используя ggplot + gganimate - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть график geom_line (с использованием данных о качестве воздуха для воспроизводимого примера), показывающий изменения температуры, линию в месяц, а затем сгенерирован следующим образом:

library("tidyverse")
library("gganimate")
data("airquality")

ggplot(airquality, aes(Day, Temp, color = Month)) +
     geom_line(size = 2) +
     geom_dl(aes(label = Month), method = list(dl.trans(x = x + 0.1, y = y + 0.25), "last.points", fontface = "bold")) +
     transition_time(Month) +
     labs(title = 'Month is {frame_time}') +
     shadow_mark(aes(color = Month),size=1, alpha=0.7, past=T, future=F) +
     geom_path(aes(color = Month), size = 1)

Отображение этой анимации:

enter image description here

Моя главная задача - добиться того же, но , отображая названия месяцев вместо цифр (что позволяет мне указывать название месяца в метке и заголовке) и избавиться от прямой линии, соединяющей начало и конец каждой линии .Я пробовал это (пока безуспешно):

aq <- airquality %>%
      dplyr::mutate(Month = month.name[Month])

ggplot(aq, aes(Day, Temp, color = Month)) +
  geom_line( size = 1) +
  geom_dl(aes(label = Month), method = list(dl.trans(x = x + 0.1, y = y + 0.25), "last.points", fontface = "bold")) +
  transition_time(Month) +
  labs(title = month.name['{frame_time}']) +
  shadow_mark(size = 1, colour = 'grey') +
  geom_path(aes(group = Month), size = 1)

Error: time 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
3: In min(cl[cl != 0]) : no non-missing arguments to min; returning Inf

1 Ответ

0 голосов
/ 29 ноября 2018

Установите название месяца в качестве новой переменной и используйте его для label.Затем вы можете использовать transition_states вместо transition_time, который принимает только число, целое число или дату / время.Вы можете установить столбец с полной датой и использовать его в transition_time, но использовать transition_states довольно просто.Вам нужно будет заказать уровни, если вы пойдете по этому маршруту, в противном случае они будут упорядочены в алфавитном порядке: states.

library("tidyverse")
library("gganimate") # devtools::install_github("thomasp85/gganimate")
library("directlabels")
library("transformr") # devtools::install_github("thomasp85/transformr")
data("airquality")

aq <- airquality %>%
  dplyr::mutate(MonthName = month.name[Month])

aq$MonthName <- factor(aq$MonthName, levels = c("May", "June", "July", "August", "September"))

ggplot(aq, aes(Day, Temp, color = Month)) +
  geom_line( size = 1) +
  geom_dl(aes(label = MonthName), method = list(dl.trans(x = x + 0.1, y = y + 0.25), "last.points", fontface = "bold")) +
  transition_states(MonthName, transition_length = 3, state_length = 1) +
  labs(title = 'Month is {closest_state}') +
  shadow_mark(size = 1, colour = 'grey') +
  geom_path(aes(group = MonthName), size = 1)

...