堆积图结合冲积图 - python

stacked chart combine with alluvial plot - python

令人惊讶的是,关于 python 和 pyalluvial 包的信息很少。我希望在同一张图中结合堆积条和相应的冲积层。

使用下面的方法,我有三个独特的组,在 Group 中进行了概述。我想显示每个 Group 对每个唯一 Point 的比例。我以这种方式设置了数据格式,因为每个 Point.

我需要三个单独的堆叠条形图

总的来说 (Ove) 突出了所有三个 Points 的整体比例。 Group 1占70%,Group 2占20%,Group 3占10%。但是每组的比例在不同的时间间隔发生变化Points。我希望将其显示为标准堆积条形图,但在顶部添加冲积层。

import pandas as pd
import pyalluvial.alluvial as alluvial 

df = pd.DataFrame({
    'Group': [1, 2, 3],
    'Ove': [0.7, 0.2, 0.1],
    'Point 1': [0.8, 0.1, 0.1],
    'Point 2': [0.6, 0.2, 0.2],
    'Point 3': [0.7, 0.3, 0.0],
    })

ax = alluvial.plot(
   df = df, 
   xaxis_names = ['Group','Point 1','Point 2', 'Point 3'], 
   y_name = 'Ove', 
   alluvium = 'Group',
)

输出显示整体组比例(第一个柱)是正确的。但是下面的堆叠条与比例。

如果我转换 df 并将点作为单个列,那么我不会得到 3 个单独的条。

正如@darthbaba 正确指出的那样,pyalluvial 期望数据帧格式由匹配不同变量类型组合的频率组成。为了给你一个有效输入的例子,每个 Group 中的每个 Point 都被标记为存在 (1) 或不存在 (0):

df = pd.DataFrame({
    'Group': [1] * 6 + [2] * 6 + [3] * 6,
    'Point 1': [1, 1, 1, 1, 0, 0] * 3,
    'Point 2': [0, 1, 0, 1, 1, 0] * 3,
    'Point 3': [0, 0, 1, 1, 1, 1] * 3,
    'freq': [23, 11, 5, 7, 10, 12, 17, 3, 6, 17, 19, 20, 28, 4, 13, 8, 14, 9]
    })

fig = alluvial.plot(df=df, xaxis_names=['Point 1','Point 2', 'Point 3'], y_name='freq', alluvium='Group', ignore_continuity=False)

显然,上述代码没有解决问题,因为 pyalluvial 尚未支持包含堆叠条形图,就像它在 ggalluvial (see example #5). Therefore, unless you want to use ggalluvial, your best option IMO is to add the required functionality yourself. I'd start by modifying line #85 中的实现方式一样。