Другим вариантом может быть использование библиотеки xkcd
для получения волнистых линий. Это не делает волнистые заливки, но это начало и находится в правильном эстетическом соседстве. Я не смог заставить его работать "из коробки" с gganimate
, но можно подготовить ваши данные с помощью tweenr
(тот же пакет, на котором полагается gganimate
) и передать их в gganimate::transition_manual
до достойного эффекта:
Вот как. Учитывая эти поддельные данные:
library(tidyverse); library(gganimate)
df <- tibble(Group = rep(1:3, times = 3),
value = c(1:6, 3:1),
period = rep(1:3, each = 3))
Мы могли бы анимировать с помощью geom_rect
и gganimate::transition_states
. geom_col
было бы проще, но я хочу показать сходство с xkcd::xkcdrect
позже.
ggplot() +
geom_rect(data = df,
aes(xmin = Group - 0.4, xmax = Group + 0.4,
ymin = 0, ymax = value),
fill = "gray80") +
transition_states(period)
Я получаю ошибку, когда япадение в xkcd::xkcdrect
эквиваленте:
# Doesn't work
ggplot() +
xkcd::xkcdrect(aes(xmin = Group - 0.4, xmax = Group + 0.4,
ymin = 0, ymax = value), fill = "gray80",
df) +
transition_states(period)
Ошибка в if (nrow (from) == 0 && nrow (to) == 0) {: отсутствует значение, где требуется TRUE / FALSE Вдополнение: Предупреждающие сообщения: 1: В rep («raw», length = nrow (from)): первый элемент, использованный в аргументе «length.out» 2: In rep («raw», length = nrow (to)): firstэлемент, используемый в аргументе length.out 3: В rep (NA_integer_, length = nrow (to)):
первый элемент, использованный в аргументе length.out
Но мы можем получитьв то же самое место, предварительно подготовив предварительно обработанные данные, а затем передайте их в transition_manual
:
df_tween <- tweenr::tween_states(
list(df[1:3,],
df[4:6,],
df[7:9,],
df[1:3,]), 3, 1, 'cubic-in-out', 100)
ggplot() +
xkcd::xkcdrect(aes(xmin = Group - 0.4, xmax = Group + 0.4,
ymin = 0, ymax = value), fill = "gray80",
df_tween) +
transition_manual(.frame)