使用R语言fmsb包绘制人口增长雷达图失败,求解决方案
修复fmsb雷达图展示全球区域人口增长趋势的问题
想要用fmsb包的radarchart函数展示全球五大区域(rest、africa、china、oecd、seasia)的人口增长及未来趋势,预期将各区域作为雷达射线类别,每年的数据作为一个多边形绘制,但生成的图表效果极差。原代码如下:
library(fmsb) rnames <- c("rest", "africa", "china", "oecd", "seasia") y1960 <- c( 759, 283, 660, 815, 517) y1990 <- c(1405, 630, 1177, 1109, 1006) y2020 <- c(2041, 1341, 1439, 1369, 1605) y2060 <- c(2533, 2905, 1333, 1446, 1934) y2100 <- c(2441, 4280, 1065, 1400, 1689) pop <- data.frame( y1960, y1990, y2020, y2060, y2100 ) colnames(pop) <- rnames areas <- c(rgb(1, 0, 0, 0.25), rgb(0, 1, 0, 0.25), rgb(0, 0, 1, 0.25), rgb(0, 1, 1, 0.25), rgb(1, 0, 1, 0.25)) radarchart(pop, cglty = 1, cglcol = "gray", plwd = 2, plty = 1, pfcol = areas)
问题根源
fmsb的radarchart函数有硬性数据格式要求:
- 每一列对应一个雷达射线的类别(即你要展示的五大区域)
- 每一行对应一个要绘制的多边形(即各年份的人口数据)
- 必须在数据框前两行分别定义每个类别的最大值和最小值(函数会基于这两行做归一化,没有的话会自动用现有数据极值,但结构错了就会彻底混乱)
你原代码把区域设为列、年份设为行,但没加极值行,且函数默认把每行(年份)当成变量、每列(区域)当成多边形,完全搞反了逻辑,所以图表异常。
修复方案
步骤1:调整数据结构并添加极值行
把年份作为行名,区域作为列,再在数据框顶部添加最大值、最小值两行,确保雷达图刻度范围正确。
步骤2:重新调用radarchart
此时每行(年份)对应一个多边形,每列(区域)对应一条雷达射线,完全符合你的需求。
修改后的代码:
library(fmsb) # 整理数据:年份为行名,区域为列 pop_data <- data.frame( rest = c(759, 1405, 2041, 2533, 2441), africa = c(283, 630, 1341, 2905, 4280), china = c(660, 1177, 1439, 1333, 1065), oecd = c(815, 1109, 1369, 1446, 1400), seasia = c(517, 1006, 1605, 1934, 1689), row.names = c("1960", "1990", "2020", "2060", "2100") ) # 添加最大值、最小值行到数据框顶部 pop_radar <- rbind( apply(pop_data, 2, max), # 自动计算各区域人口最大值 apply(pop_data, 2, min), # 自动计算各区域人口最小值 pop_data ) # 定义各年份多边形的填充色 areas <- c(rgb(1, 0, 0, 0.25), rgb(0, 1, 0, 0.25), rgb(0, 0, 1, 0.25), rgb(0, 1, 1, 0.25), rgb(1, 0, 1, 0.25)) # 绘制雷达图 radarchart(pop_radar, cglty = 1, cglcol = "gray", plwd = 2, plty = 1, pfcol = areas, title = "全球五大区域人口增长趋势(1960-2100)", vlcex = 0.8) # 调整区域标签字号 # 添加图例,区分不同年份的多边形 legend("topright", legend = rownames(pop_data), fill = areas, bty = "n", cex = 0.8)
额外说明
- 现在雷达图每条射线对应一个区域,每个彩色多边形对应一个年份的人口规模,能清晰对比各年份不同区域的人口变化
- 你也可以手动设置极值(比如统一设为
c(5000, 0)),让刻度更规整 - 图例能明确区分不同年份的多边形,避免混淆
内容的提问来源于stack exchange,提问作者ivo Welch
相关产品推荐
相关产品推荐

