问题

我正在尝试可视化有关个人的面板数据,其中包括每个时间段内的离散或分类选择以及连续选择。这种情况的一个常见示例是客户购买产品/订阅,然后选择使用产品/服务的频率。

我想显示跨每个时间段的连续变量加权的时间段上的“流量”-加权堆积条形图和sankey或冲积图之间的某种交叉。桑基图和冲积图从根本上表示节点之间的流量,其中每个流量都有一个单一的大小。相反,我想显示代表连续选择的“流程”,即使对于同一个人,该选择在不同时间段可能具有不同的值。生成的图看起来与Sankey或冲积图非常相似,不同之处在于,冲积物或“水流”将逐渐改变时间段之间的宽度。例如,假设客户在两个时间段内购买了相同的订阅,但是在第二个时间段内更频繁地使用它;该使用可以由从第一时间段到第二时间段宽度增加的带或“流”表示。

  • 此图表类型是否已存在于任何地方?我无法在相当广泛的搜索中找到任何示例。如果不存在,我希望这样的图表类型的值是明确的,并且有人会命名并创建它! :)
  • 如何使用现有的冲积库或sankey库在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)
    

    我可以很好地可视化离散或分类选择项的面板数据。堆积的条形图可用于显示每个类别中的个人数量随时间变化的方式。冲积图或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)
    

    通过加权堆积的条形图,我还可以按类别和跨时间段查看连续选择的总数。
    # stacked bar diagram of discrete choice, weighting by continuous choice
    g + geom_bar(position="stack",aes(weight=continuouschoice))
    

    但是,我无法在此加权堆叠的条形图中添加跨时间段的任何类型的“流”。这些“流”在时间段1中的宽度将与时间段2中的宽度不同,因此需要将其显示为在时间段之间逐渐变化的宽度。相比之下,桑基图和冲积图对于每个流来说只有一个大小或宽度。

    最佳答案

    在将冲积软件包改编为 ggplot2 框架的开始时,我就遇到了这种困惑。 Sankey和冲积图在位置之间改变权重的情况并不少见,但是冲积并不是为处理数据而设计的,该格式适合于对其进行编码。 (编辑:冲积中的alluvial_ts()函数以前是README中的一个示例,但它不会在每个时间段都生成堆叠的直方图。)

    一种选择可能是在 ggforce 的开发版本中使用the parallel set geoms,尽管我自己并不熟悉它们。我知道的另一个是我自己的ggalluvial。我认为,这是使用您的数据集d(注意颜色不同)解决问题的一种方法:

    library(ggalluvial)
    ggplot(
      data = d,
      aes(
        x = timeperiod,
        stratum = discretechoice,
        alluvium = individual,
        y = continuouschoice
      )
    ) +
      geom_stratum(aes(fill = discretechoice)) +
      geom_flow()
    

    r - 加权sankey/冲积图可显示离散和连续的面板数据?-LMLPHP

    还可以为时间段之间的流着色。请参阅示例。

    我无法很好地讨论数据格式的差异,即每一行对应于所有时间段的一个主题,而不是一个时间段的一个主题,因此我尝试用the vignette编写一个。如果您有任何建议,我将很高兴听到他们的建议!

    关于r - 加权sankey/冲积图可显示离散和连续的面板数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43053375/

    10-12 20:04