First, you should load recharts:

library(recharts)

1 Introduction

Radar plot includes 1 basic types:

  • Radar

The keys are:

  • character x and numeric y and will be compacted using data.table::dcast with fun=sum
  • x is used as indicators, while facet is used to produce separate pies!
  • you can use setPolar to tune the polar system parameters.

2 Function Call

echartr(data, x, <y>, <series>, <facet>, <t>, <type>, <subtype>)
Arg Requirement

data

source data in the form of data.frame

x

character independent variable. Each level of x[,1] is treated as polar axis labels. Other type will be coerced to factors. Only the first one is accepted if multiple variables are provided.

y

numeric dependent variable. Only the first one is accepted if multiple variables are provided.

series

series variable which will be coerced to factors. Each level of series is treated as a subsetting factor to produce data series. Only the first one is accepted if multiple variables are provided.

facet

facetting variable which will be coerced to factors. Each level of facet is treated as a subsetting factor to produce separate pies. Only the first one is accepted if multiple variables are provided.

t

timeline variable which will be coerced to factors. Only the first one is accepted if multiple variables are provided.

type

‘radar’.

subtype

  • radar: “fill”
    • fill: fill the radar with color (default hollow)

3 Showcase

3.1 Data Preparation

Let’s look into mtcars dataset embeded in the package datasets. We want to compare some paramters (c(‘mpg’,‘disp’,‘hp’,‘qsec’,‘wt’,‘drat’)) among several models (Mercedes-benz 450 series).

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

Set type ‘radar’ and do not set series or facet. But such a radar chart makes little sense.

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

3.2.2 Radar with Multiple Series

So we always want to set data series to compare the parameters series by series.

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

3.3 Multiple Radars

If you don’t set series, instead, set facet, you will yield a bunch of radars shoulder by shoulder.

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

3.4 With Timeline

You can set t to yield a radar chart with timeline.

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

When it comes to timeline, you should pay special attention. In order to make timeline work properly, you need an expand.grid dataset to cover all the combinations of x, series and t levels.

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

The default radar chart is built on polygons. You can built it on circle using setPolar, which is only appliable for radar charts.

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

You can explore setPolar by typing ?setPolar in R console.

Then you can configure the widgets, add markLines and/or markPoints, fortify the chart.

You can refer to related functions to play around on your own.