首先,加载recharts:
library(recharts)
漏斗图有2种类型:
关键是:
x和数值型y,会使用data.table::dcast压缩(fun=sum)series用作数据系列,而facet用于产生多个不同的漏斗图!echartr(data, x, <y>, <series>, <facet>, <t>, <type>, <subtype>)
| 参数 | 要求 |
|---|---|
data |
数据框格式的源数据 |
x |
文本型自变量。 |
y |
数值型应变量。如提供多个变量,只传入第一个。 |
series |
转为因子后计算。 |
facet |
转为因子后计算。 |
t |
时间轴变量,转为因子后计算。如提供多个变量,只传入第一个。 |
type |
‘funnel’, ‘pyramid’. |
subtype |
|
考察datasets包自带数据集mtcars。按carb及am的分布如下。
cars <- data.table::dcast(mtcars, carb+am~., length, value.var='gear')
names(cars) <- c("carb", "am", "N")
knitr::kable(cars)
| carb | am | N |
|---|---|---|
| 1 | 0 | 3 |
| 1 | 1 | 4 |
| 2 | 0 | 6 |
| 2 | 1 | 4 |
| 3 | 0 | 3 |
| 4 | 0 | 7 |
| 4 | 1 | 3 |
| 6 | 1 | 1 |
| 8 | 1 | 1 |
type设为’funnel’。
echartr(cars, carb, N, type='funnel') %>%
setTitle('mtcars: carb distibution')
设置series,可获得套叠的漏斗图。
echartr(cars, carb, N, am, type='funnel') %>%
setTitle('mtcars: carb distibution by am')
漏斗图用facet作为区分不同极坐标系的分组变量。所以,我们用am (有2个水平) 作为facet,可得到2个漏斗图。
echartr(cars, carb, N, facet=am, type='funnel') %>%
setTitle('mtcars: carb distibution by am')
需要一个时间轴变量。不妨用’gear’。
cars_gear <- data.table::dcast(mtcars, carb+gear+am~., length, value.var='gear')
names(cars_gear) <- c("carb", "gear", "am", "N")
为了让时间轴正确显示,我们需要用expand.grid扩展数据集,覆盖x及t各水平的全部组合。
fullData <- with(mtcars, data.frame(
expand.grid(unique(carb), unique(gear), unique(am))))
names(fullData) <- c("carb", "gear", "am")
cars_gear <- merge(cars_gear, fullData, all.y=TRUE)
echartr(cars_gear, carb, N, facet=am, t=gear, type='funnel') %>%
setTitle('mtcars: carb distibution by am across gear')
左对齐。
echartr(cars, carb, N, facet=am, type='funnel', subtype='left') %>%
setTitle('mtcars: carb distibution by am across gear')
type设为’pyramid’。
echartr(cars, carb, N, facet=am, type='pyramid') %>%
setTitle('mtcars: carb distibution by am')
也可以混合funnel和pyramid。type和subtype需要整理成list。
echartr(cars, carb, N, facet=am, type=list('funnel', 'pyramid')) %>%
setTitle('mtcars: carb distibution by am')
echartr(cars, carb, N, facet=am, type=list('funnel', 'pyramid'),
subtype=list('right', 'left')) %>%
setTitle('mtcars: carb distibution by am')
接下来可以配置控件、添加标注点/标注线,以及美化成图。
参考相关函数,尽情探索吧。