堆积图结合冲积图 - 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 中的实现方式一样。
令人惊讶的是,关于 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 中的实现方式一样。