我有一个AWK脚本,根据分数对序列进行着色, 它会对RGB模式下的残差进行着色,这些序列可以使用某些软件进行可视化。问题是脚本颜色为红色,分数范围较高,绿色为中等,白色为低范围。我想以某种方式更改它为低范围分配红色,为中间分配蓝色,或者换句话说,我希望脚本以另一种方式工作,从低到高不高到低......我如何处理这个问题。我是一名生物学家,我不知道awk是如何工作的。请帮我解决这个问题。
着色是基于此。 http://www.pymolwiki.org/index.php/Spectrum
/usr/bin/awk -v aa_shift=$2 '
BEGIN{
r1=1; g1=1; b1=1;
r2=1; g2=1; b2=0;
r3=1; g3=0; b3=0;
maxfrq=-1*10000;
minfrq=1*10000;
aan=0;
}
{
if ($1!="" && $2!="") {
aan++;
aa_ind[aan]=1.0*$2;
aa_frq[aan]=1.0*$3;
}
}
END{
for(i=1;i<=aan;i++) {
if(aa_frq[i]>maxfrq) {
maxfrq=aa_frq[i];
}
if(aa_frq[i]<minfrq) {
minfrq=aa_frq[i];
}
}
half=(maxfrq-minfrq)/2
for(i=1;i<=aan;i++) {
aa_frq[i]=aa_frq[i]-minfrq
if (aa_frq[i]<half) {
fraction=aa_frq[i]/half
aa_r[i]=r1+fraction*(r2-r1)
aa_g[i]=g1+fraction*(g2-g1)
aa_b[i]=b1+fraction*(b2-b1)
} else {
fraction=(aa_frq[i]-half)/half
aa_r[i]=r2+fraction*(r3-r2)
aa_g[i]=g2+fraction*(g3-g2)
aa_b[i]=b2+fraction*(b3-b2)
}
print "set_color c" i ", [" aa_r[i] "," aa_g[i] "," aa_b[i] "]"
print "color c" i ", resi " aa_ind[i]+aa_shift " and prot"
}
}' $1
脚本使用序列及其得分,例如,得分为53.8的第一个序列A将被涂成红色,而最低得分序列L被着色为白色或任何浅色但我想将它们着色为红色而改变顺序
sequence no. score
A 394 53.8314
E 395 12.7202
L 396 4.5191
L 397 22.1270
Q 398 47.6526
提前感谢您宝贵的建议。
答案 0 :(得分:5)
BEGIN
块中的变量控制着色,因此您可以修改这些值以满足您的要求:
r1=1; g1=1; b1=1;
r2=1; g2=1; b2=0;
r3=1; g3=0; b3=0;
如果分数低于平均分数,则颜色将介于[r1, g1, b1]
和[r2, g2, b2]
之间。如果它高于平均分,则它将在[r2, g2, b2]
和[r3, g3, b3]
之间。该范围的上升或下降取决于得分远离平均得分的程度。
因此,您可以更改这些初始变量以满足您的需求;如果您希望红色为低色,蓝色为中间,绿色为高,请尝试将数字更改为:
r1=1; g1=0; b1=0;
r2=0; g2=0; b2=1;
r3=0; g3=1; b3=0;