问题
我正在尝试可视化个人的面板数据,包括离散或分类选择以及每个时间段的连续选择.这种情况的一个常见示例是客户购买产品/订阅,然后选择使用产品/服务的频率.
我想显示在每个时间段内由连续变量加权的时间段内的"流量" - 加权堆积条形图和sankey或冲积图之间的某种交叉.Sankey和冲积图从根本上代表节点之间的流量,其中每个流量具有单个量值.相反,我想展示代表连续选择的"流量",它可能在不同的时间段内具有不同的值,即使对于同一个体也是如此.得到的图表看起来非常类似于sankey或冲积图,除了alluvia或"flow"将逐渐改变时间段之间的宽度.例如,假设客户在两个时间段内购买相同的订阅,但在第二个时间段内更频繁地使用它; 该使用可以由从第一时间段到第二时间段的宽度增加的带或"流"表示.
R中的例子
我将通过一个使用R来解释问题的例子.这是一个示例数据集:
library(tidyr)
library(dplyr)
library(alluvial)
library(ggplot2)
library(forcats)
set.seed(42)
individual <- rep(LETTERS[1:10],each=2)
timeperiod <- paste0("time_",rep(1:2,10))
discretechoice <- factor(paste0("choice_",sample(letters[1:3],20, replace=T)))
continuouschoice <- ceiling(runif(20, 0, 100))
d <- data.frame(individual, timeperiod, discretechoice, continuouschoice)
Run Code Online (Sandbox Code Playgroud)
我可以很好地可视化离散或分类选择片的面板数据.堆积条形图可用于显示每个类别中的个人数量如何随时间变化.冲积图或sankey图还可以显示导致类别总数发生变化的各个运动.例如:
# stacked bar diagram of discrete choice by individual
g <- ggplot(data=d,aes(timeperiod,fill=fct_rev(discretechoice)))
g + geom_bar(position="stack") + guides(fill=guide_legend(title=NULL))
# alluvial diagram of discrete choice by individual
d_alluvial <- d %>%
select(individual,timeperiod,discretechoice) %>%
spread(timeperiod,discretechoice) %>%
group_by(time_1,time_2) %>%
summarize(count=n()) %>%
ungroup()
alluvial(select(d_alluvial,-count),freq=d_alluvial$count)
Run Code Online (Sandbox Code Playgroud)

我还可以通过对堆积条形图进行加权来按类别和跨时间段查看连续选择总计. …