ggplot2:极坐标中的连接点与直线2

时间:2017-03-02 17:32:49

标签: r ggplot2

coord_polar曲线,有时候你可能不希望(即当空间被认为是离散的而不是连续的)时:

iris %>% gather(dim, val, -Species) %>%
  group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
  ggplot(aes(dim, val, group=Species, col=Species)) + 
    geom_line(size=2) + coord_polar()

enter image description here

previous workaround不再有效。任何人对更新的解决方法有任何想法吗?

1 个答案:

答案 0 :(得分:2)

极坐标中的数据点与直线相连的数据点也称为雷达图

Erwan Le Pennec撰写了一篇文章:From Parallel Plot to Radar Plot处理用ggplot2创建雷达图的问题。

他建议使用coord_radar()定义为:

coord_radar <- function (theta = "x", start = 0, direction = 1) {
  theta <- match.arg(theta, c("x", "y"))
  r <- if (theta == "x") "y" else "x"
  ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start, 
          direction = sign(direction),
          is_linear = function(coord) TRUE)
}

有了这个,我们可以按如下方式创建图:

library(tidyr)
library(dplyr)
library(ggplot2)

iris %>% gather(dim, val, -Species) %>%
  group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
  ggplot(aes(dim, val, group=Species, col=Species)) + 
  geom_line(size=2) + coord_radar()

enter image description here

coord_radar()ggiraphExtra包的一部分。所以,你可以直接使用它

iris %>% gather(dim, val, -Species) %>%
      group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
      ggplot(aes(dim, val, group=Species, col=Species)) + 
      geom_line(size=2) + ggiraphExtra:::coord_radar()

请注意,程序包不会导出coord_radar()。因此,访问该函数需要三个冒号(:::)。