【问题标题】:Transition (Sankey) plot with time on x axisx 轴上随时间变化的过渡(桑基)图
【发布时间】:2018-02-06 17:39:02
【问题描述】:

我有一个转换矩阵如下:

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"))

【问题讨论】:

    标签: r plot transition sankey-diagram networkd3


    【解决方案1】:

    来自未来的自我回答: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")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多