[英]R - Alluvial plots for combinations
我一直想知道如何使用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条柱将被未处理和已处理,并且连接将基于基因在治疗前后如何改变其值的比例。 绝对有可能做到这一点,而我似乎并没有掌握冲积积积概念。 任何帮助将不胜感激。
编辑:这是我制作的样例草图,情节看起来像
谢谢。
这似乎是你所追求的
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)
另外,您可以使用ggalluvial
附带的包装easyalluvial
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'))
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()
希望能帮助到你。
谢谢山姆
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.