Возникла проблема с 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)
Но когда я использую gganimate, сюжет для B ведет себя странно. Во втором кадре столбцы начинаются со значений, на которых заканчиваются столбцы первого кадра, а не с начала координат. Как будто это была гистограмма с накоплением.
p <- ggplot(df, aes(x = x, y = y, frame = z)) +
geom_bar(stat = "Identity")
gg_animate(p)
Между прочим, когда пробует тот же сюжет с 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
точно соответствует исключительно рисованию одного из цветов одновременно.