x 轴上时间的过渡 (Sankey) 图
Transition (Sankey) plot with time on x axis
我有一个转换矩阵如下:
1. A A B
2. B C A
3. A C C
其中每一列代表周期,每一行代表一个代理,每个字母代表一个状态。我想创建一个图,例如 Sankey Diagram,它显示每个时期从一个状态到另一个状态的转换。
代理人的身份并不重要。
所以我想要这样的情节:
。
It seems 我可以使用 networkD3 或 googleVis 包。然而,由于每个节点的位置是由包内生决定的,我不知道如何将时间方面放在 X 轴上。
任何帮助或替代可视化建议将不胜感激,
非常感谢,
您可以通过以下方式重现示例数据:
transitiondata <- data.frame("t1"=c("A","B","A"),
"t2"=c("A","C","C"),
"t3"=c("B","A","C"))
Self-answering 来自未来:ggalluvial
包,非常适合这个任务,是在那段时间开发的。为了使用它,我们需要提供整洁的数据。
让我们加载我们需要的库:
library(ggplot2)
library(ggalluvial)
library(tidyr)
library(dplyr
然后需要在我们将数据转换为 tidy 格式之前为数据创建标识符。所以新的数据是这样的:
transitiondata$id <- c("id1","id2","id3")
转换为 tidy 格式
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
而 ggplot2
和 ggalluvial
可以解决问题:
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")
我们的转换 (Sankey) 图已准备就绪:
我有一个转换矩阵如下:
1. A A B
2. B C A
3. A C C
其中每一列代表周期,每一行代表一个代理,每个字母代表一个状态。我想创建一个图,例如 Sankey Diagram,它显示每个时期从一个状态到另一个状态的转换。
代理人的身份并不重要。
所以我想要这样的情节:
。
It seems 我可以使用 networkD3 或 googleVis 包。然而,由于每个节点的位置是由包内生决定的,我不知道如何将时间方面放在 X 轴上。
任何帮助或替代可视化建议将不胜感激, 非常感谢,
您可以通过以下方式重现示例数据:
transitiondata <- data.frame("t1"=c("A","B","A"),
"t2"=c("A","C","C"),
"t3"=c("B","A","C"))
Self-answering 来自未来:ggalluvial
包,非常适合这个任务,是在那段时间开发的。为了使用它,我们需要提供整洁的数据。
让我们加载我们需要的库:
library(ggplot2)
library(ggalluvial)
library(tidyr)
library(dplyr
然后需要在我们将数据转换为 tidy 格式之前为数据创建标识符。所以新的数据是这样的:
transitiondata$id <- c("id1","id2","id3")
转换为 tidy 格式
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
而 ggplot2
和 ggalluvial
可以解决问题:
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")
我们的转换 (Sankey) 图已准备就绪: