首先,加载recharts
:
library(recharts)
雷达图包含一种类型:radar
关键是:
x
和数值型y
,会使用data.table::dcast
压缩(fun=sum
)x
用作指标系列,而facet
用于产生多个不同的雷达图!setPolar
微调极坐标参数。echartr(data, x, <y>, <series>, <facet>, <t>, <type>, <subtype>)
变量 | 要求 |
---|---|
data |
数据框格式的源数据 |
x |
文本型自变量。 |
y |
数值型应变量。如提供多个变量,只传入第一个。 |
series |
转为因子后计算。 |
facet |
转为因子后计算。 |
t |
时间轴变量,转为因子后计算。如提供多个变量,只传入第一个。 |
type |
‘radar’. |
subtype |
|
考察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 |
type
设为’radar’,不设置series
和facet
。但这样的单雷达图价值不大。
echartr(cars, indicator, Parameter, type='radar')
我们一般都要设置数据系列,以便对比。
echartr(cars, indicator, Parameter, model, type='radar', sub='fill') %>%
setTitle('Merc 450SE vs 450SL vs 450SLC')
设置facet
,可以获得多个雷达图。
echartr(cars, indicator, Parameter, facet=model, type='radar') %>%
setTitle('Merc 450SE vs 450SL vs 450SLC')
设置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')
setPolar
雷达图默认构建在多边性极坐标系。可以用setPolar
改为圆形极坐标系。但仅适用于雷达图。
echartr(cars, indicator, Parameter, facet=model, type='radar') %>%
setTitle('Merc 450SE vs 450SL vs 450SLC') %>%
setPolar(type='circle')
在R控制台键入?setPolar
查看帮助。
接下来可以配置控件、添加标注点/标注线,以及美化成图。
参考相关函数,尽情探索吧。