我有一个如下所示的数据框:
set.seed(1)
mydf <- data.frame()
for (g in LETTERS[1:4]){
m <- data.frame(Group=g,
Gene=paste(sample(letters[1:4],25,replace=TRUE), sample(1:25,25,replace=FALSE), sep=''),
FoldChange=runif(25, -2, 2))
mydf <- rbind(mydf, m)
}
mydf$UpDown <- "DOWN"
mydf$UpDown[which(mydf$FoldChange>0)] <- "UP"
head(mydf)
Group Gene FoldChange UpDown
1 A b10 -0.08952151 DOWN
2 A b1 1.44483791 UP
3 A c9 -0.24761157 DOWN
4 A d20 -1.02081089 DOWN
5 A a8 -1.71728381 DOWN
6 A d25 -1.60213536 DOWN
我想显示 cross 的交集Genes
,Groups
所以我做了一个维恩图:
mylist <- split(as.character(mydf$Gene), list(mydf$Group))
venn.diagram(mylist, filename="test.png", height=1000, width=1000, imagetype="png", units="px")
但是,我真的很想以某种方式显示FoldChange
(或至少是UpDown
)值。我想过做这样的事情,将重叠的数字分成UP
和DOWN
Genes
:
但是仍然有一个给定Gene
的情况可以UP
在一个Group
和DOWN
另一个中,所以上面的维恩图会很不准确......
subset(mydf, Gene=='b16')
Group Gene FoldChange UpDown
16 A b16 -0.9679329 DOWN
34 B b16 0.5711820 UP
90 D b16 -1.1147763 DOWN
我认为展示这一点的最佳方式是Circos 情节。
每个 应该有一个部分Group
,链接组之间的共享Genes
,并包括FoldChange
(或UpDown
)信息。
我可以想到两种可以包含信息的方式:
1-Gene
如果 A 和 B 之间的连接线(例如)在两者中,则为红色,如果在DOWN
两者Groups
中,则为蓝色。如果在 A 和B 中,它们会被染成红色变成蓝色,如果发生相反的情况,它们会变成蓝色(这有意义吗?)UP
Groups
Gene
DOWN
UP
2-在 Circos 图中包含一条额外的信息带,其中包含FoldChange
值(红色表示负条,蓝色表示正条)。Genes
重叠的大部分都在一起会很好(而不是到处都是细毛,并根据FoldChange
值排序)。可能与此类似:
但是,我真的不知道如何开始,我过去尝试使用该circlize
软件包制作简单的 Circos 图,但完全失败了。
我认为我想要完成的概念相当简单......有没有人知道如何在 Circos 图上清楚地显示它(或者就此而言,你可以建议的任何其他表示)?
非常感谢!