不需要 awk,您可以在 gnuplot 中完成这一切(因此与平台无关)。
这将是我的第一次尝试。您将通过在 x 值处绘制不需要的数据来进行过滤NaN
但是,这会给出一些警告:warning: add_tic_user: list sort error
你可以忽略它。
但这或许可以通过一些改变来避免。
Edit:当第一行第 5 列中的值
要创建输出文件,只需将其添加到您的脚本中:(检查help output
)
set term pngcairo size 800,600
set output "myOutputFile.png"
...<your script>...
set output
Data: SO73961783.dat
#Acceptor DonorH Donor Frames Frac AvgDist AvgAng
lig_608@O3 HIE_163@HE2 HIE_163@NE2 498 0.5304 2.8317 153.0580
lig_608@O GLU_166@H GLU_166@N 476 0.5069 2.8858 161.7174
lig_608@O1 HIE_41@HE2 HIE_41@NE2 450 0.4792 2.8484 158.5193
THR_26@O lig_608@H9 lig_608@N1 399 0.4249 2.8312 149.9578
lig_608@O2 THR_26@H THR_26@N 312 0.3323 2.9029 164.8033
lig_608@O1 ASN_142@HD21 ASN_142@ND2 14 0.0149 2.8445 158.4224
lig_608@O1 GLN_189@HE22 GLN_189@NE2 2 0.0021 2.8562 149.7421
lig_608@O1 GLN_189@HE21 GLN_189@NE2 1 0.0011 2.7285 158.4377
lig_608@O3 GLY_143@H GLY_143@N 1 0.0011 2.7421 147.8213
脚本1:
过滤数据并将其写入新表中。如果不满足条件 >0.05,则写入空行。可能是最容易理解并给出最短的最终绘图命令。
### conditional xtic labels
reset session
set termoption noenhanced
FILE = "SO73961783.dat"
set xlabel "Fraction, %"
set ylabel "H-bond donor, residue"
set key off
set style fill solid 0.5
set boxwidth 0.9
set grid y
set xrange[-1:5]
set table $Filtered
myTic(col1,col2) = strcol(col1)[1:3] eq 'lig' ? strcol(col2) : strcol(col1)
plot FILE u ((y0=column(5))>0.05 ? sprintf("%g %s",y0,myTic(1,3)) : '') w table
unset table
plot $Filtered u 0:1:xtic(2) w boxes
### end of script
脚本2:
没有额外的表格,但有更复杂的绘图命令。增加 x 位置x0
如果发现值>0.05(第一次除外),如果发现值
### conditional xtic labels
reset session
set termoption noenhanced
FILE = "SO73961783.dat"
set xlabel "Fraction, %"
set ylabel "H-bond donor, residue"
set key off
set style fill solid 0.5
set boxwidth 0.9
set grid y
set xrange[-1:5]
myTic(col1,col2) = strcol(col1)[1:3] eq 'lig' ? strcol(col2) : strcol(col1)
plot x0=c=(t0='',0) FILE u ((y0=column(5))>0.05 ? (c==0 ? (c=1,t0=myTic(1,3)) : (x0=x0+1,t0=myTic(1,3))) : (y0=NaN),x0):(y0):xtic(t0) w boxes
### end of script
Result: