2

我有一个转换矩阵如下:

1.  A  A  B
2.  B  C  A
3.  A  C  C

其中每一列代表周期,每一行代表一个代理,每个字母代表一个状态。我想要一个像桑基图这样的图,它显示了每个时期从状态到状态的转换。代理人的身份并不重要。
所以我想有一个这样的情节: 在此处输入图像描述

.
看来我可以使用 networkD3 或 googleVis 包。然而,由于每个节点的位置是由包内生决定的,我不知道如何将时间方面放在 X 轴上。

任何帮助或替代可视化建议将不胜感激,非常感谢提前,

您可以通过以下方式重现示例数据:

    transitiondata <- data.frame("t1"=c("A","B","A"),
                                 "t2"=c("A","C","C"),
                                 "t3"=c("B","A","C"))
4

1 回答 1

0

来自未来的自我回答:ggalluvial在此期间开发了非常适合此任务的包。为了使用它,我们需要提供整洁的数据。

让我们加载我们需要的库:

library(ggplot2)
library(ggalluvial)
library(tidyr)
library(dplyr

然后需要为数据创建标识符,然后再将其转换为整洁的格式。所以新的数据是这样的:

transitiondata$id <- c("id1","id2","id3")

转换成整洁的格式

transitiondata_tidy <- transitiondata %>% 
                           gather(time, state, t1,t2,t3) %>% 
                           mutate(time = as.factor(time), state = as.factor(state))

这是我们的数据的样子:

   id time state
1 id1   t1     A
2 id2   t1     B
3 id3   t1     A
4 id1   t2     A
5 id2   t2     C
6 id3   t2     C
7 id1   t3     B
8 id2   t3     A
9 id3   t3     C

并且成功ggplot2ggalluvial

ggplot(transitiondata_tidy,
       aes(x = time, stratum = state, alluvium = id, fill = state, label = state)) +
  geom_stratum() +
  geom_text(stat = "stratum", size = 3) +
  geom_flow(fill = "darkgrey", color = "black")

我们的过渡(桑基)情节已经准备就绪:

在此处输入图像描述

于 2019-07-18T20:15:44.220 回答