如何在ggplot2或R中绘制雷达图

3

我正在尝试使用ggplot2(或R中的其他包)制作雷达图,如附图所示imageThis 中讨论了这个问题,但我的情况与众不同,因为我正在尝试创建响应数据的蜘蛛图并设置特定范围。 我使用以下代码制作了一个图形,但我无法弄清楚如何使其像图片那样。 请帮助我。

Impcts <- c("system","supply","security","well-being")
present <- c(5,5,3,5)
past <- c(6,6,4,5)
group.names <- c("present", "past")
ddf.pre <- data.frame(matrix(c(rep(group.names[1], 4), Impcts), nrow = 4,      ncol = 2), var.order = seq(1:4), value = present)
ddf.pas <- data.frame(matrix(c(rep(group.names[2], 4), Impcts), nrow = 4, ncol = 2), var.order = seq(1:4), value = past)
 ddf <- rbind(ddf.pre, ddf.pas)
 colnames(ddf) <- c("Group", "Impcts", "var.order", "var.value")
 library(ggplot2)
 ggplot(ddf, aes(y = var.value, x = reorder(Impcts, var.order),
 group =   Group, colour = Group))+
 coord_polar() + 
 geom_path() +
 geom_point()+
 labs(title = "Impacts Analysis").

enter image description here

1个回答

4

这是我的翻译:首先我使用 geom_path() 绘制了正方形。然后,我使用 geom_polygon() 绘制了两个多边形覆盖在正方形上方。最后,我添加了注释。

### Draw squares
mydf <- data.frame(id = rep(1:6, each = 5),
                   x = c(0, 6, 0, -6, 0,
                         0, 5, 0, -5, 0,
                         0, 4, 0, -4, 0,
                         0, 3, 0, -3, 0,
                         0, 2, 0, -2, 0,
                         0, 1, 0, -1, 0),
                   y = c(6, 0, -6, 0, 6,
                         5, 0, -5, 0, 5,
                         4, 0, -4, 0, 4,
                         3, 0, -3, 0, 3,
                         2, 0, -2, 0, 2,
                         1, 0, -1, 0, 1))

g <- ggplot(data = mydf, aes(x = x, y = y, group = factor(id)) +
     geom_path()

### Draw polygons
mydf2 <- data.frame(id = rep(7:8, each = 5),
                    x = c(0, 6, 0, -5, 0,
                          0, 5, 0, -5, 0),
                    y = c(6, 0, -4, 0, 6,
                          5, 0, -3, 0, 5))

gg <- g +
      geom_polygon(data = mydf2, aes(x = x, y = y, group = factor(id), fill = factor(id))) +
      scale_fill_manual(name = "Time", values = c("darkolivegreen4", "brown4"),
                        labels = c("Past", "Present"))


### Add annotation

mydf3 <- data.frame(x = c(0, 6.5, 0, -6.5),
                    y = c(6.5, 0, -6.5, 0),
                    label = c("system", "supply", "security", "well-being"))


ggg <- gg + 
       annotate("text", x = mydf3$x, y = mydf3$y, label = mydf3$label, size = 3)

ggsave(ggg, file = "name.png", width = 10, height = 9)

enter image description here


亲爱的@jazzurro,感谢您提供的好的锻炼和解决方案。在我的情况下,我需要制作超过30个不同的雷达图表。在每种情况下,现在和过去的值都基于响应而变化(范围从0-10)。因此,您能否建议我对您的代码进行哪些可能的修改,以便可以使用不同的现在和过去的值。过去和现在的值的变化将改变多边形的形状。谢谢。 - Cirrus
1
@ Cirrus 感谢您的评论。 1)如果您有一个1-10的评级标准,您想在第一步绘制10个正方形。这里我有一个1-6的比例尺。您可以轻松修改这一部分。 2)如果您有超过30个图表,则可能要考虑使用lapply()与ggplot函数。您可以创建一个包含所有点数据的大型数据框架。您可以使用特定位置名称或类似的东西对数据进行子集处理。只要像我一样指定x和y值,您就可以为图表绘制多边形。希望这在某种程度上能对您有所帮助。 - jazzurro
谢谢@jazzuuro。我会尝试使用facet来制作多个图表。谢谢。 - Cirrus
@Cirrus 希望你能取得更多进展。祝你好运。 :) - jazzurro
如果你们需要更多的例子:我在我的实现中也使用了geom_polygon - 5th

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接