【问题标题】:R - Alluvial plots for combinationsR - 组合冲积地块
【发布时间】:2018-08-23 18:05:30
【问题描述】:

我一直想知道如何使用 R 中的数据框生成冲积图(例如,利用 ggalluvial 包)

我有一个如下的数据框

   GENE UNTREATED TREATED
1    G1      FOUR    FOUR
2    G2      FOUR    FOUR
3    G3      FOUR    FOUR
4    G4      FOUR   THREE
5    G5     THREE    NONE
6    G6     THREE    NONE
7    G7       TWO   THREE
8    G8       TWO     ONE
9    G9       ONE     ONE
10  G10       TWO     ONE

我想用这些数据生成一个冲积图。例如,图中的 2 个条形将是 UNTREATED 和 TREATED,连接将基于基因在治疗前后改变其值的比例。绝对应该可以做到这一点,我似乎没有掌握冲积情节的概念。任何帮助将不胜感激。

编辑:这是我制作的情节示例草图

谢谢。

【问题讨论】:

  • 抱歉,我应该添加一张图片。我现在加了。我检查了链接,但我真的不明白如何将我的数据转换为 ggalluvial 输入的格式。
  • 尝试查看link 了解如何使用ggalluvial 的信息如果您仍然遇到问题,请提供您尝试过的代码,以便我们尝试指出您出错的地方跨度>

标签: r data-visualization


【解决方案1】:

或者,您可以使用 easyalluvial 附带的 ggalluvial 包装器

 dd<-read.table(text="   GENE UNTREATED TREATED
               1    G1      FOUR    FOUR
               2    G2      FOUR    FOUR
               3    G3      FOUR    FOUR
               4    G4      FOUR   THREE
               5    G5     THREE    NONE
               6    G6     THREE    NONE
               7    G7       TWO   THREE
               8    G8       TWO     ONE
               9    G9       ONE     ONE
               10  G10       TWO     ONE", header=TRUE)


easyalluvial::alluvial_wide( dd, id = GENE, fill_by = 'all_flows',
                             order_levels = c('NONE','FOUR', 'THREE', 'TWO', 'ONE'))

【讨论】:

    【解决方案2】:

    这似乎是你所追求的

    dd<-read.table(text="   GENE UNTREATED TREATED
    1    G1      FOUR    FOUR
    2    G2      FOUR    FOUR
    3    G3      FOUR    FOUR
    4    G4      FOUR   THREE
    5    G5     THREE    NONE
    6    G6     THREE    NONE
    7    G7       TWO   THREE
    8    G8       TWO     ONE
    9    G9       ONE     ONE
    10  G10       TWO     ONE", header=TRUE)
    
    ggplot(dd, aes(axis1=UNTREATED, axis2=TREATED)) +
      geom_alluvium() + 
      geom_stratum(width = 1/12, fill = "black", color = "grey") +
      geom_label(stat = "stratum", label.strata = TRUE)
    

    【讨论】:

    • 哇,这正是我想要的情节。非常感谢:)
    【解决方案3】:

    MrFlick 的回答非常好。另一种选择是使用冲积地块,这已在“https://github.com/topepo/caret/issues/755”中讨论过。

    library(alluvial)
    plotCM <- function(cm){
      cmdf <- as.data.frame(cm[["table"]])
      cmdf[["color"]] <- ifelse(cmdf[[1]] == cmdf[[2]], "green", "red")  
      alluvial::alluvial(cmdf[,1:2]
                     , freq = cmdf$Freq
                     , col = cmdf[["color"]]
                     , alpha = 0.5
                     , hide  = cmdf$Freq == 0
     )
    }
    
    dd<-read.table(text="   GENE UNTREATED TREATED
    1    G1      FOUR    FOUR
    2    G2      FOUR    FOUR
    3    G3      FOUR    FOUR
    4    G4      FOUR   THREE
    5    G5     THREE    NONE
    6    G6     THREE    NONE
    7    G7       TWO   THREE
    8    G8       TWO     ONE
    9    G9       ONE     ONE
    10  G10       TWO     ONE", header=TRUE)
    
    labels=unique(dd$UNTREATED)
    d1 <- factor(dd$UNTREATED,labels=labels)
    d2 <- factor(dd$TREATED,labels=labels)
    confusionMatrix(d1,d2) %>% plotCM()
    

    希望对你有帮助。

    谢谢,山姆

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 1970-01-01
      • 2020-01-23
      • 2022-11-16
      • 2022-12-19
      • 2021-12-28
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多