Я хотел бы использовать gganimate для перехода между состояниями на радиолокационной карте.
Рассмотрим следующий пример из поста здесь, посвященного переполнению стека Curycu:
Закрытиелинии на диаграмме радара / паука ggplot2
library(dplyr)
library(data.table)
library(ggplot2)
rm(list=ls())
scale_zero_to_one <-
function(x) {
r <- range(x, na.rm = TRUE)
min <- r[1]
max <- r[2]
(x - min) / (max - min)
}
scaled.data <-
mtcars %>%
lapply(scale_zero_to_one) %>%
as.data.frame %>%
mutate(car.name=rownames(mtcars))
plot.data <-
scaled.data %>%
melt(id.vars='car.name') %>%
rbind(subset(., variable == names(scaled.data)[1]))
# create new coord : inherit coord_polar
coord_radar <-
function(theta='x', start=0, direction=1){
# input parameter sanity check
match.arg(theta, c('x','y'))
ggproto(
NULL, CoordPolar,
theta=theta, r=ifelse(theta=='x','y','x'),
start=start, direction=sign(direction),
is_linear=function() TRUE)
}
plot.data %>%
ggplot(aes(x=variable, y=value, group=car.name, colour=car.name)) +
geom_polygon(aes(fill=car.name), alpha=0.2) +
geom_point(size=rel(0.9)) +
coord_radar() +
facet_wrap(~ car.name, nrow=4) +
theme_bw() +
theme(
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.x = element_blank(),
legend.position = 'none') +
labs(title = "Cars' Status")
Это дает удивительный граненый сюжет для каждого автомобиля.Я сделал небольшое изменение в исходном коде и изменил geom_path
на geom_polygon
.
Вместо того, чтобы иметь граненый график, я хотел бы отобразить график в виде одной диаграммы, которая проходит через car.name
.Однако использование transition_states
приводит к ошибке:
plot.data %>%
ggplot(aes(x=variable, y=value, group=car.name, colour=car.name)) +
geom_polygon(aes(fill=car.name), alpha=0.2) +
geom_point(size=rel(0.9)) +
coord_radar() +
transition_states(car.name, transition_length = 3, state_length = 6) +
enter_grow() +
exit_shrink() +
ease_aes('sine-in-out') +
theme_bw() +
theme(
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.x = element_blank(),
legend.position = 'none') +
labs(title = "Cars' Status")
Ошибка:
Error in transform_polygon(all_frames, next_state, ease, params$transition_length[i], :
transformr is required to tween polygons
Эта проблема не относится к geom_polygon, поскольку ее замена на geom_path приводит к аналогичной ошибке.Есть ли способ изменить это, чтобы заставить его работать?