0

我想使用 gganimate 来转换雷达图中的状态。

考虑以下来自 Curycu 在 Stack Overflow 上的帖子中的示例:

关闭 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_pathgeom_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 会产生类似的错误。有没有办法修改它以使其工作?

4

1 回答 1

2

我没有意识到变压器是我需要安装的与 thomasp85 不同的软件包。

devtools::install_github('thomasp85/transformr')
于 2018-11-29T22:04:41.083 回答