在手工绘制通路图时,往往需要更具gene值的大小(比如表达量值,IPA软件中的活化指标Z值)生成对应的渐变色来表示每个基因或分子的表达量高低或活化程度。渐变色可以通过写脚本得到:(举个例子:perl脚本)
! /usr/bin/perl
use strict; use warnings; 渐变色顺序:红->白->蓝 (f00->fff->00f) my $num=20; #渐变色数目 my $max=5.516838682161793; #最红或最蓝对应的最大值 my $step = $max/$num; my $step255 =255/$num; my $start=0; my %hash; my %step255; my %stepround; for(0..$num){ $hash{$_}=$step$_; $step255{$_}=$step255$_; $stepround{$_}=int($step255*$_+0.5); #四舍五入:+0.5再取整 }
while(<DATA>){ next if /^\t/; chomp; my @fields = split /\t/;
my $index=3; #0 2 Rv24C 4 Rv8C 6 Ra24C for(0..$num){ if($fields[$index]>=0 && $fields[$index]>=$hash{$_} && $fields[$index]<$hash{$_+1}){ my $r=255; my $b=255-$stepround{$_}; my $g=255-$stepround{$_}; my $Oxr=sprintf("%x",$r); my $Oxb=sprintf("%x",$b); my $Oxg=sprintf("%x",$g); print "$fields[0]\t$fields[$index]\t$Oxr$Oxb$Oxg\n"; }elsif($fields[$index]<0 && abs($fields[$index])>=$hash{$_} && abs($fields[$index])<$hash{$_+1}){ my $r=255-$stepround{$_}; my $b=255-$stepround{$_}; my $g=255; my $Oxr=sprintf("%x",$r); my $Oxb=sprintf("%x",$b); my $Oxg=sprintf("%x",$g); print "$fields[0]\t$fields[$index]\t$Oxr$Oxb$Oxg\n"; } } }
DATA
Rv24C Rv8C Ra24C
IRF3 5.442654557 5.516838682 4.342411224
IRF7 5.027871795 5.292265264 4.519819914
TLR3 4.441545469 5.064171519 4.711831816
TLR4 3.581277344 4.515208681 4.120545703
TLR9 4.031102402 4.490588386 4.580095414
MYD88 3.945894574 3.973232099 4.454086338
NFkB (complex) 2.923177431 3.271093786 3.447288477
NOD2 2.774576088 3.239316084 3.524400785
TLR7 2.927371983 2.575860452 3.121775111
TLR5 0 2.407572883 2.414227836
TBK1 1.615445029 2.201804459 1.786802167
P38 MAPK 0.93061723 2.084696244 1.741663371
TLR2 1.222867035 2.070098651 2.950178211
CD14 0 1.978347029 2.19485897
TIRAP 1.988003314 1.605540367 2.406618076
IRAK4 1.2355959 0 1.339364055
TRAF6 0 0 1.91719535
TRAF3 0 -1.570717443 -0.95961623
那么如何得到对应的渐变图例呢?(R脚本)
> nlev <- colorRampPalette(c("#0000ff","#ffffff","#ff0000"))(100) #生成渐变色
> plot(y = c(1, (length(nlev) + 1)), x = c(1, 2),xaxs = 'i', yaxs = 'i', xaxt = 'n', yaxt = 'n',type = 'n', ann = F) > rect(xleft = rep(0, (length(nlev) + 1)),ybottom = 1:length(nlev),xright = rep(2, (length(nlev) + 1)),ytop = 2:(length(nlev) + 1),col = nlev,border = nlev)

拓展资料:
https://www.cnblogs.com/Free-Thinker/p/5569781.html #渐变色计算
https://www.cnblogs.com/Free-Thinker/p/5569792.html #渐变色方案
https://blog.csdn.net/weixin_40628687/article/details/78389396?locationNum=1&fps=1 #渐变色函数