如何在python中绘制多个组之间的过渡

Posted

技术标签:

【中文标题】如何在python中绘制多个组之间的过渡【英文标题】:How to plot transition among multiple groups in python 【发布时间】:2021-08-08 07:21:02 【问题描述】:

我想在 python 中绘制多个组之间的转换。假设我在给定的日期时间 x 有三组 A、B 和 C。现在在日期时间 y > x 我想可视化 A 的哪些元素转换到 B 组,转换到 C 的百分比。对于 B 和 C 也是如此。我现在可以假设有固定数量的元素。我也可以将其扩展到多个日期,例如 x

可以使用此代码生成我的用例的示例数据框

elements = [f'ei' for i in range(10)]
x = pd.DataFrame('element': elements, 'group': np.random.choice(['A', 'B', 'C'], size=10), 'date': pd.to_datetime('2021-04-01'))
y = pd.DataFrame('element': elements, 'group': np.random.choice(['A', 'B', 'C'], size=10), 'date': pd.to_datetime('2021-04-10'))
df = x.append(y)

现在从上面的数据框中,我想可视化这两个日期从 A、B 和 C 组的过渡是如何发生的。

我的主要问题是我不知道在 python 中使用什么情节来可视化这一点,任何线索都会非常有帮助。

【问题讨论】:

【参考方案1】:

这是一种获得所需的方法,即从一个日期转移到另一个日期:

# pivot the data so dates become columns
s = df.pivot(index='element', columns='date', values='group')

s 设为:

date    2021-04-01 2021-04-10
element                      
e0               A          A
e1               A          C
e2               B          B
e3               B          B
e4               C          C
e5               A          C
e6               B          B
e7               C          A
e8               C          A
e9               C          A

接下来,

# compare the two consecutive dates
pairwise = pd.get_dummies(s.iloc[:, 1]).T @ pd.get_dummies(s.iloc[:,0])

这会给你pairwise

   A  B  C
A  1  0  3
B  0  3  0
C  2  0  1

这意味着,例如第一列表示第一个日期有 3 个A,一个保持A,第二个日期有2 个更改为C。最后,您可以使用

轻松计算百分比
pairwise / pairwise.sum()

输出,您可以使用 sns.heatmap 之类的东西来可视化:

          A    B     C
A  0.333333  0.0  0.75
B  0.000000  1.0  0.00
C  0.666667  0.0  0.25

注意关于扩展问题,对于每一对 (day1, day2), (day2, day3),...,您将拥有一系列这些矩阵。由您决定如何将它们可视化。

【讨论】:

@NikhilMishra 如果您在我编辑之前看到了答案:pairwise 的定义有更新。 是的,观察到了。仍然想知道是否有更好的方法来显示过渡。我更关心可视化部分,如何最好地展示它

以上是关于如何在python中绘制多个组之间的过渡的主要内容,如果未能解决你的问题,请参考以下文章

如何在存在多个组的单个直方图中绘制多条平均线?

使用 AVQueuePlayer 时如何在视频之间添加过渡?

如何在 Python 中绘制元组列表?

如何在android中的谷歌地图上绘制路线并计算多个标记之间的距离

如何使用 React 过渡组对每个项目使用不同的延迟?

如何在谷歌地图中绘制多个地理点之间的路线(注意:这是公交车站路线)?