我想使用ggplot2绘制水平条形图,并突出显示满足特定条件的区域。
在这种情况下,如果点“E15.5-E18.5_up_down”的任何“Term”与点“P22-P29_up_down”相比具有两倍以上的样本,反之亦然,则突出显示该标签或区域。
我有以下格式的数据框:
CLID CLSZ GOID NodeSize SampleMatch Phyper Padj Term Ont SampleKeys
E15.5-E18.5_up_down 1364 GO:0007568 289 20 0.141830716154421 1 aging BP ENSMUSG00000049932 ENSMUSG00000046352 ENSMUSG00000078249 ENSMUSG00000039428 ENSMUSG00000014030 ENSMUSG00000039323 ENSMUSG00000026185 ENSMUSG00000027513 ENSMUSG00000023224 ENSMUSG00000037411 ENSMUSG00000020429 ENSMUSG00000020897 ENSMUSG00000025486 ENSMUSG00000021477 ENSMUSG00000019987 ENSMUSG00000023067 ENSMUSG00000031980 ENSMUSG00000023070 ENSMUSG00000025747 ENSMUSG00000079017
E15.5-E18.5_up_down 1364 GO:0006397 416 3 0.999999969537913 1 mRNA processing BP ENSMUSG00000027510 ENSMUSG00000021210 ENSMUSG00000027951
P22-P29_up_down 476 GO:0007568 289 11 0.0333771791166823 1 aging BP ENSMUSG00000049932 ENSMUSG00000037664 ENSMUSG00000026879 ENSMUSG00000026185 ENSMUSG00000026043 ENSMUSG00000060600 ENSMUSG00000022508 ENSMUSG00000020897 ENSMUSG00000028702 ENSMUSG00000030562 ENSMUSG00000021670
P22-P29_up_down 476 GO:0006397 416 2 0.998137879564768 1 mRNA processing BP ENSMUSG00000024007 ENSMUSG00000039878
缩小为(仅限绘图所需的那些术语):
CLID SampleMatch Term
E15.5-E18.5_up_down 20 aging
P22-P29_up_down 2 mRNA processing
E15.5-E18.5_up_down 3 mRNA processing
P22-P29_up_down 11 aging
我更喜欢一种适用于任何条件的通用方法,而不仅仅是我需要的方案。我想象的一种方法是为每对CLID / Term使用sapply
并创建另一列,如果条件符合布尔值,则存储,但我仍然无法找到突出显示值的方法。实现这一目标的最有效方法是什么?
我的方法的伪代码:
for(i in CLID) {
for(k in CLID) {
if (Term[i] == Term[k]) {
condition = check(Term[i], Term[k]) #check if the SampleMatch count for any for any CLID/Term pair is significantly higher compared to corresponding CLID/Term pair
if (condition == True) {
highlight(term)
}
}
}
}