首先,加载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')
接下来可以配置控件、添加标注点/标注线,以及美化成图。
参考相关函数,尽情探索吧。