您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# R语言可视化中如何用ggplot构造期待已久的雷达图
雷达图(Radar Chart)又称蜘蛛图(Spider Plot),是一种将多维数据映射到极坐标系的经典可视化方法。在R语言生态中,虽然ggplot2并未原生支持雷达图,但通过巧妙的坐标转换和扩展包配合,我们依然能够实现专业级的雷达图效果。本文将详细介绍三种主流实现方案,并提供完整的代码示例。
## 一、雷达图的核心原理与适用场景
### 1.1 基本特征
- **极坐标映射**:将直角坐标系转换为极坐标系
- **轴线辐射**:每个变量对应一条从中心向外辐射的轴线
- **数值映射**:数据值转换为轴线上的点,相邻点连线形成多边形
### 1.2 典型应用场景
- 多维数据对比(如球员能力雷达图)
- 性能评估体系展示
- 多指标综合评价分析
## 二、基于ggplot2的基础实现方案
### 2.1 数据准备
首先构造示例数据集:
```r
library(tidyverse)
skills <- tibble(
category = c("编程", "统计", "可视化", "机器学习", "沟通"),
张三 = c(8, 7, 9, 6, 7),
李四 = c(6, 8, 7, 8, 6)
) %>%
pivot_longer(-category, names_to = "person", values_to = "score")
ggplot(skills, aes(x = category, y = score, group = person)) +
geom_polygon(aes(color = person), fill = NA, size = 1.5, alpha = 0.1) +
geom_point(aes(color = person), size = 3) +
coord_polar() +
theme_minimal() +
labs(x = NULL, y = NULL)
+ geom_hline(yintercept = seq(0, 10, by = 2), color = "gray90")
+ scale_x_discrete(limits = levels(skills$category))
+ scale_color_brewer(palette = "Set1") +
theme(panel.grid.major.x = element_line(color = "gray80"))
install.packages("ggradar")
library(ggradar)
# 需要宽格式数据
skills_wide <- skills %>%
pivot_wider(names_from = person, values_from = score)
ggradar(
skills_wide,
values.radar = c("0", "5", "10"),
grid.min = 0, grid.mid = 5, grid.max = 10
)
ggradar(
skills_wide,
axis.labels = skills_wide$category,
group.colours = c("#1F77B4", "#FF7F0E"),
background.circle.colour = "white",
gridline.min.colour = "gray",
gridline.mid.colour = "blue",
gridline.max.colour = "gray"
)
library(fmsb)
max_min <- data.frame(
编程 = c(10, 0), 统计 = c(10, 0),
可视化 = c(10, 0), 机器学习 = c(10, 0),
沟通 = c(10, 0)
)
radar_data <- rbind(
max_min,
filter(skills_wide, 张三 == "张三") %>% select(-person),
filter(skills_wide, 李四 == "李四") %>% select(-person)
)
radarchart(
radar_data,
pcol = c("#1F77B4", "#FF7F0E"),
pfcol = scales::alpha(c("#1F77B4", "#FF7F0E"), 0.3),
plwd = 2
)
legend(
"topright",
legend = c("张三", "李四"),
bty = "n", pch = 20,
col = c("#1F77B4", "#FF7F0E"),
text.col = "grey40"
)
特性 | ggplot2原生方案 | ggradar方案 | fmsb方案 |
---|---|---|---|
学习曲线 | 较高 | 中等 | 较低 |
自定义灵活性 | ★★★★★ | ★★★★ | ★★★ |
默认美观度 | ★★★ | ★★★★★ | ★★★★ |
多系列支持 | 优秀 | 优秀 | 良好 |
交互式扩展能力 | 支持plotly | 有限 | 不支持 |
nba_data <- tibble(
stat = c("得分", "篮板", "助攻", "抢断", "盖帽"),
Curry = c(95, 15, 90, 70, 20),
Jokic = c(85, 95, 90, 65, 60)
)
ggradar(nba_data,
grid.min = 0, grid.max = 100,
group.colours = c("#FFC325", "#8BB3E9"),
legend.position = "bottom")
+ theme(axis.text.x = element_text(size = 8, vjust = -0.5))
skills <- skills %>%
group_by(category) %>%
mutate(score_scaled = scales::rescale(score, to = c(0, 10)))
geom_polygon(na.rm = TRUE)
library(plotly)
p <- ggplot(...) # 基础ggplot对象
ggplotly(p, tooltip = c("group", "y"))
通过本文介绍的多种方法,读者可以根据具体需求选择最适合的雷达图实现方案。建议初学者从ggradar开始,逐步过渡到更灵活的ggplot2原生方案。记住,好的可视化不在于形式的复杂,而在于能否清晰传达数据洞察。 “`
注:实际使用时请根据R包版本调整代码,部分新特性可能需要安装开发版包。建议在绘制前先对数据进行适当的标准化处理,确保各维度数值范围一致。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。