ggplot2: точки соединения в полярных координатах с прямой линией 2

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()

Предыдущий обходной путь для этого больше не работает. У кого-нибудь есть идеи для обновленного обходного пути?

1 ответ

Решение

График в полярных координатах с точками данных, соединенными прямыми линиями, также называется радиолокационным графиком.

Есть статья Эрвана Ле Пеннека: " От параллельного участка до радиолокационного участка", посвященная проблеме создания радиолокационного участка с 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()

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() не экспортируется пакетом. Итак, тройная кишка (:::) требуется для доступа к функции.

Другие вопросы по тегам