Возникла проблема с geom_bar?

Я с завистью и восхищением смотрел на различные анимации ggplot, появляющиеся в твиттере с тех пор, как Дэвид Робинсон выпустил свой пакет gganimate и подумал, что я сам сыграю. У меня проблема с gganimate при использовании geom_bar. Надеемся, что следующий пример демонстрирует проблему.

Сначала сгенерируйте некоторые данные для воспроизводимого примера:

df <- data.frame(x = c(1, 2, 1, 2),
                 y = c(1, 2, 3, 4),
                 z = c("A", "A", "B", "B"))

Чтобы продемонстрировать, что я пытаюсь сделать, я подумал, что было бы полезно построить обычный ggplot, ограненный z, Я пытаюсь заставить gganimate произвести gif, который циклично перемещается между этими двумя сюжетами.

ggplot(df, aes(x = x, y = y)) +
   geom_bar(stat = "Identity") +
   facet_grid(~z)

facetted_barchart

Но когда я использую gganimate, сюжет для B ведет себя странно. Во втором кадре столбцы начинаются со значений, на которых заканчиваются столбцы первого кадра, а не с начала координат. Как будто это была гистограмма с накоплением.

p <- ggplot(df, aes(x = x, y = y, frame = z)) +
   geom_bar(stat = "Identity") 
gg_animate(p)

bars_animation

Между прочим, когда пробует тот же сюжет с geom_point все работает как положено.

q <- ggplot(df, aes(x = x, y = y, frame = z)) +
    geom_point() 
gg_animate(q)

Я пытался опубликовать несколько изображений, но, видимо, у меня нет достаточной репутации, поэтому я надеюсь, что это имеет смысл без них. Это ошибка, или я что-то упустил?

Заранее спасибо,

Томас

1 ответ

Решение

Причина в том, что без огранки бары укладываются. использование position = "identity":

p <- ggplot(df, aes(x = x, y = y, frame = z)) +
  geom_bar(stat = "Identity", position = "identity") 
gg_animate(p)

введите описание изображения здесь

Чтобы избежать путаницы в подобных ситуациях, гораздо полезнее заменить frame от fill (или же colourв зависимости от того, какой гем вы используете`):

p <- ggplot(df, aes(x = x, y = y, fill = z)) +
  geom_bar(stat = "Identity") 
p

введите описание изображения здесь

Два графика, которые нарисованы, когда вы заменяете fill от frame точно соответствует исключительно рисованию одного из цветов одновременно.

Другие вопросы по тегам