首先,加载recharts:

library(recharts)

1 介绍Introduction

雷达图包含一种类型:radar

关键是:

  • 文本型x和数值型y,会使用data.table::dcast压缩(fun=sum
  • x用作指标系列,而facet用于产生多个不同的雷达图!
  • 可以用setPolar微调极坐标参数。

2 用法Function Call

echartr(data, x, <y>, <series>, <facet>, <t>, <type>, <subtype>)
变量 要求

data

数据框格式的源数据

x

文本型自变量。x[1,]的每个水平被处理为极坐标轴。其他类型会被转为因子后计算。如提供多个变量,只传入第一个。

y

数值型应变量。如提供多个变量,只传入第一个。

series

转为因子后计算。series的每个水平被处理为分组因子,产生数据系列。如提供多个变量,只传入第一个。

facet

转为因子后计算。facet的每个水平被处理为分组因子,用于产生独立的极坐标系。如提供多个变量,只传入第一个。

t

时间轴变量,转为因子后计算。如提供多个变量,只传入第一个。

type

‘radar’.

subtype

  • radar: “fill”
    • fill: 雷达图填色 (默认不填色)

3 举例Showcase

3.1 数据准备Data Preparation

考察datasets包自带数据集mtcars。我们要考察不同车款(Mercedes-benz 450系列)的c(‘mpg’,‘disp’,‘hp’,‘qsec’,‘wt’,‘drat’)指标。

cars = mtcars[c('Merc 450SE','Merc 450SL','Merc 450SLC'),
              c('mpg','disp','hp','qsec','wt','drat')]
cars$model <- rownames(cars)
cars <- data.table::melt(cars, id.vars='model')
names(cars) <- c('model', 'indicator', 'Parameter')
knitr::kable(cars)
model indicator Parameter
Merc 450SE mpg 16.40
Merc 450SL mpg 17.30
Merc 450SLC mpg 15.20
Merc 450SE disp 275.80
Merc 450SL disp 275.80
Merc 450SLC disp 275.80
Merc 450SE hp 180.00
Merc 450SL hp 180.00
Merc 450SLC hp 180.00
Merc 450SE qsec 17.40
Merc 450SL qsec 17.60
Merc 450SLC qsec 18.00
Merc 450SE wt 4.07
Merc 450SL wt 3.73
Merc 450SLC wt 3.78
Merc 450SE drat 3.07
Merc 450SL drat 3.07
Merc 450SLC drat 3.07

3.2 雷达图Radar Chart

3.2.1 单个雷达图Single Radar

type设为’radar’,不设置seriesfacet。但这样的单雷达图价值不大。

echartr(cars, indicator, Parameter, type='radar')

3.2.2 多系列雷达图Radar with Multiple Series

我们一般都要设置数据系列,以便对比。

echartr(cars, indicator, Parameter, model, type='radar', sub='fill') %>%
    setTitle('Merc 450SE  vs  450SL  vs  450SLC')

3.3 多个雷达图Multiple Radars

设置facet,可以获得多个雷达图。

echartr(cars, indicator, Parameter, facet=model, type='radar') %>%
        setTitle('Merc 450SE  vs  450SL  vs  450SLC')

3.4 带时间轴With Timeline

设置t,获得带时间轴的雷达图。

echartr(cars, indicator, Parameter, t=model, type='radar') %>%
        setTitle('Merc 450SE  vs  450SL  vs  450SLC')

涉及时间轴时,要格外注意。为了让时间轴正常显示,我们需要用expand.grid扩展数据集,覆盖x、series和z各水平的所有组合情况。

carstat = data.table::dcast(data.table::data.table(mtcars),
              am + carb + gear ~., mean,
              value.var=c('mpg','disp','hp','qsec','wt','drat'))
carstat = data.table::melt(carstat, id=c('am', 'carb', 'gear'))
names(carstat) <- c('am', 'carb', 'gear', 'indicator', 'Parameter')
levels(carstat$indicator) <- gsub("_mean_\\.", "",
                                  levels(carstat$indicator))
carstat$am <- factor(carstat$am, labels=c('A', 'M'))
fullData <- data.frame(expand.grid(levels(carstat$indicator),
            levels(carstat$am), unique(carstat$carb)))
carstat <- merge(fullData, carstat, all.x=TRUE)
carstat$carb <- as.factor(carstat$carb)
carstat$gear <- as.factor(carstat$gear)
str(carstat)
## 'data.frame':    5616 obs. of  8 variables:
##  $ Var1     : Factor w/ 6 levels "mpg","disp","hp",..: 1 2 3 4 5 6 1 2 3 4 ...
##  $ Var2     : Factor w/ 2 levels "A","M": 1 1 1 1 1 1 2 2 2 2 ...
##  $ Var3     : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ am       : Factor w/ 2 levels "A","M": 1 1 1 1 1 1 1 1 1 1 ...
##  $ carb     : Factor w/ 6 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ gear     : Factor w/ 3 levels "3","4","5": 1 1 1 1 1 1 1 1 1 1 ...
##  $ indicator: Factor w/ 6 levels "mpg","disp","hp",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Parameter: num  20.3 20.3 20.3 20.3 20.3 ...
echartr(carstat, indicator, Parameter, am, facet=carb, t=gear, type='radar') %>%
    setTitle('Merc 450SE  vs  450SL  vs  450SLC')

4 其他设置Futher Setup

4.1 设置极坐标setPolar

雷达图默认构建在多边性极坐标系。可以用setPolar改为圆形极坐标系。但仅适用于雷达图。

echartr(cars, indicator, Parameter, facet=model, type='radar') %>%
        setTitle('Merc 450SE  vs  450SL  vs  450SLC') %>%
    setPolar(type='circle')

在R控制台键入?setPolar查看帮助。

接下来可以配置控件、添加标注点/标注线,以及美化成图。

参考相关函数,尽情探索吧。