ggradar绘制多边形雷达图

用R语言绘制雷达图,尝试了三种工具:fmsb、echarts4r和ggradar,前两种绘制的是多边形雷达图,但导出比较麻烦。ggradar默认绘制的是圆形雷达图,这里用分组的方法重新绘制了图形边界,最终成果如下:

1. 安装

# ggradar为github包,需要devtools辅助安装
install.packages('devtools')
library(devtools)
install_github("ricardo-bion/ggradar")

2.获取数据

依然以官网给的mtcars数据为例,用自己的数据需保证数据框除第一列外,其余列数据类型均为数值型:

# 载入ggradar及辅助包(ggradar基于ggplot2作图,后面几个包用于数据处理)
library(ggradar)
library(ggplot2)
library(dplyr)
library(scales)
library(tibble)
options(stringsAsFactors = F)

# 提取mtcars第6列至第10列数据为作图数据,第1列为样本名
mtcars_radar <- mtcars %>% 
  as_tibble(rownames = "group") %>% 
  mutate_at(vars(-group), rescale) %>% 
  tail(1) %>% 
  select(1,6:10)

# str()函数查看数据框数据类型,除第一列为str外,其他列均为num,符合要求
str(mtcars_radar)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	1 obs. of  6 variables:
 $ group: chr "Volvo 142E"
 $ drat : num 0.622
 $ wt   : num 0.324
 $ qsec : num 0.488
 $ vs   : num 1
 $ am   : num 1

3.数据整理

若直接用ggradar作图,为圆形雷达图,如下图所示:

ggradar(mtcars_radar)

这里基于ggplot2分组方法,为数据框增加几行“背景数据”,并在作图时删去原背景,绘制多边形雷达图:

# 原数据框
mtcars_radar

# A tibble: 1 x 6
  group       drat    wt  qsec    vs    am
  <chr>      <dbl> <dbl> <dbl> <dbl> <dbl>
1 Volvo 142E 0.622 0.324 0.488     1     1

# 为数据框增加“背景”数据,绘制三层背景,分别为1.0,0.6,0.3,作为雷达图上、中、下限。
nx <- dim(mtcars_radar)[2]-1
da1 <- matrix(c(rep(1,nx),rep(0.6,nx),rep(0.3,nx)),3,byrow = T)
da2 <- data.frame(group = c('U1','U2','U3'),da1)
colnames(da2) <- colnames(mtcars_radar)
dat2 <- rbind(da2,mtcars_radar)

# 修改后数据框(U1、U2、U3三层背景设置在原数据框之上,按ggplot2绘图原则,原数据框图形会叠在最上层,不受背景线条遮挡,最清晰。
dat2

       group      drat        wt      qsec  vs  am
1         U1 1.0000000 1.0000000 1.0000000 1.0 1.0
2         U2 0.6000000 0.6000000 0.6000000 0.6 0.6
3         U3 0.3000000 0.3000000 0.3000000 0.3 0.3
4 Volvo 142E 0.6221198 0.3239581 0.4880952 1.0 1.0

4.ggradar绘图

# 将dat2数据框除第1列外均转换为数值型数据,保证绘图函数正确执行
dat2[,-1] <- sapply(dat2[,-1],as.numeric)

# 设置dat2第一列数据框为有序因子(factor),保证各分组数据绘制顺序,保证原数据框图形绘制在最上方
dat2$group <- factor(dat2$group,levels = dat2$group)

# 绘制基础图形,调整文字大小,base为所有文字,axis为外圈文字,grid为圈内标签文字
p <- ggradar(dat2, base.size = 12,axis.label.size = 5,grid.label.size = 5,

# 设置各层bar值,values.radar仅支持“内”、“中”,“外”三个数值,超过三个将只取前三
             values.radar = c("30%","60%","100%"),

# 设置grid标签环分割值(决定grid标签文字位置),grid.max必须大于数据框最大值,grid.min控制最小环大小,太大图片不协调,grid.mid设置为二者中间值,标签分布较协调
             grid.max = 1.0,grid.mid = 0.55,grid.min = 0.1,

# 设置不显示图例
             legend.position = 'none',

# 将灰色背景改为白色,原图grid环颜色只保留最小环为灰色且线条类型改为实线,其他全部为白色(不可见)
             background.circle.colour = 'white',
             gridline.min.colour = 'grey80',
             gridline.mid.colour = 'white',
             gridline.max.colour = 'white',
             gridline.min.linetype = 'solid',

# 设置U1、U2、U3等背景组线条颜色为灰色,与最小环共同构成新背景,需展示的数据组线条颜色为红色
             group.colours = c(rep('grey80',3),'red'),

# 设置U1、U2、U3等背景组点大小为0.5、线条宽度为0.5;需展示的数据组点大小为3,线条宽度为1.5(突出展示数据)
             group.point.size = c(rep(0.5,dim(dat2)[2]*3),rep(3,dim(dat2)[2])),
             group.line.width = c(rep(0.5,dim(dat2)[2]*3),rep(1.5,dim(dat2)[2])),

# 设置图片横向延伸空间,防止外圈文字显示不全
             plot.extent.x.sf = 1.2,

# 将数据组样本名称设置为图表标题,并通过ggplot2 theme()函数设置标题位置(居中)和文字大小
             plot.title = dat2[4,1])+
  theme(plot.title = element_text(hjust = 0.5,size = 16))

完整代码如下:

p <- ggradar(dat2, base.size = 12,axis.label.size = 5,grid.label.size = 5,
             values.radar = c("30%","60%","100%"),
             grid.max = 1.0,grid.mid = 0.55,grid.min = 0.1,
             legend.position = 'none',
             background.circle.colour = 'white',
             gridline.min.colour = 'grey80',
             gridline.mid.colour = 'white',
             gridline.max.colour = 'white',
             gridline.min.linetype = 'solid',
             group.colours = c(rep('grey80',3),'red'),
             group.point.size = c(rep(0.5,dim(dat2)[2]*3),rep(3,dim(dat2)[2])),
             group.line.width = c(rep(0.5,dim(dat2)[2]*3),rep(1.5,dim(dat2)[2])),
             plot.extent.x.sf = 1.2,
             plot.title = dat2[4,1])+
      theme(plot.title = element_text(hjust = 0.5,size = 16))

# ggsave保存图片
ggsave('E:/radar.png',p,device = 'png',width = 5,height = 5)

5. 不足之处

(1)通过分组设置新背景,替换原有背景,导致图例无法展示,只能展示单组数据,无法展示多组数据;

(2)values.radar参数只能输入3个值作为分层标签,导致新背景分层只能≤3层,无法扩增展示层级数。

6.参考资料

(1)R: ggradar做雷达图:http://www.yixuan520.com/sbtj-0/d39076543.html

(2)R语言可视化——用ggplot构造期待已久的雷达图:https://cloud.tencent.com/developer/article/1092251

(3)fmsb雷达图绘制:

         https://zhuanlan.zhihu.com/p/67313787

         https://zhuanlan.zhihu.com/p/51869255

         https://zhuanlan.zhihu.com/p/47653188

(4)echarts4r雷达图绘制(交互式):https://echarts4r.john-coene.com/articles/chart_types.html#radar

(5)plotly雷达图绘制(交互式):http://vlambda.com/wz_wzwU1n6RVy.html

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值