r gganimate (0.9.9.9) и transform_polygon для радиолокационных карт - PullRequest
0 голосов
/ 28 ноября 2018

Я хотел бы использовать 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 приводит к аналогичной ошибке.Есть ли способ изменить это, чтобы заставить его работать?

1 Ответ

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

Я не знал, что transformr - это пакет, отличный от thomasp85, который мне нужно было установить.

devtools::install_github('thomasp85/transformr')
...