首先,加载recharts:

library(recharts)

1 介绍Introduction

漏斗图有2种类型:

  • 漏斗图
  • 金字塔图

关键是:

  • 文本型x和数值型y,会使用data.table::dcast压缩(fun=sum
  • series用作数据系列,而facet用于产生多个不同的漏斗图!
  • 饼图和漏斗图可通过工具箱按钮快速切换

2 用法Function Call

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

data

数据框格式的源数据

x

文本型自变量。x的每个水平被处理为一个数据系列。其他类型会被转为因子后计算。如提供多个变量,只传入第一个。

y

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

series

转为因子后计算。series的每个水平被处理为分组因子,用于产生嵌套漏斗图。如提供多个变量,只传入第一个。

facet

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

t

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

type

‘funnel’, ‘pyramid’.

subtype

  • funnel: c(“left”,“center”,“right”)
    • left: funnelAlign为左(左对齐)
    • center: funnelAlign为居中 (默认)
    • right: funnelAlign为右(右对齐)
  • pyramid: c(“left”,“center”,“right”)

3 举例Showcase

3.1 数据准备Data Preparation

考察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

3.2 漏斗图Funnel Chart

3.2.1 单个漏斗图Single Funnel

type设为’funnel’。

echartr(cars, carb, N, type='funnel') %>% 
    setTitle('mtcars: carb distibution')

3.2.2 套叠漏斗图Stacked Funnel

设置series,可获得套叠的漏斗图。

echartr(cars, carb, N, am, type='funnel') %>% 
    setTitle('mtcars: carb distibution by am')

3.2.3 多个漏斗图Multiple Funnel

漏斗图用facet作为区分不同极坐标系的分组变量。所以,我们用am (有2个水平) 作为facet,可得到2个漏斗图。

echartr(cars, carb, N, facet=am, type='funnel') %>% 
    setTitle('mtcars: carb distibution by am')

3.2.4 带时间轴With Timeline

需要一个时间轴变量。不妨用’gear’。

cars_gear <- data.table::dcast(mtcars, carb+gear+am~., length, value.var='gear')
names(cars_gear) <- c("carb", "gear", "am", "N")

为了让时间轴正确显示,我们需要用expand.grid扩展数据集,覆盖xt各水平的全部组合。

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')

3.2.5 对齐方式Different Alignment

左对齐。

echartr(cars, carb, N, facet=am, type='funnel', subtype='left') %>% 
    setTitle('mtcars: carb distibution by am across gear')

3.3 金字塔图Pyramid Chart

type设为’pyramid’。

echartr(cars, carb, N, facet=am, type='pyramid') %>% 
    setTitle('mtcars: carb distibution by am')

也可以混合funnelpyramidtypesubtype需要整理成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')

4 其他设定Futher Setup

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

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