【问题标题】:bash/sed: producing 2D bar plots from multi-column databash/sed:从多列数据生成二维条形图
【发布时间】:2022-10-05 17:45:53
【问题描述】:

我正在处理按以下方式组织的多列数据的分析:

#Acceptor                DonorH           Donor   Frames         Frac      AvgDist       AvgAng
lig_608@O1            GLU_166@H       GLU_166@N    13731       0.6865       2.8609     160.4598
lig_608@O2          HIE_163@HE2     HIE_163@NE2     8320       0.4160       2.8412     150.3665
lig_608@N2         ASN_142@HD21     ASN_142@ND2     1575       0.0788       2.9141     157.3493
lig_608@N2           THR_25@HG1      THR_25@OG1      218       0.0109       2.8567     156.0376
lig_608@O1         GLN_189@HE22     GLN_189@NE2       72       0.0036       2.8427     157.3778
lig_608@N2         ASN_142@HD22     ASN_142@ND2       43       0.0022       2.9093     165.3063
lig_608@N2            SER_46@HG       SER_46@OG       32       0.0016       2.8710     159.8673
lig_608@F1           HIE_41@HE2      HIE_41@NE2       31       0.0015       2.8904     153.0763
lig_608@O2           SER_144@HG      SER_144@OG       20       0.0010       2.8147     144.6951
lig_608@N2           THR_24@HG1      THR_24@OG1       16       0.0008       2.8590     165.3937
lig_608@O2            GLY_143@H       GLY_143@N       15       0.0008       2.8729     149.1930
lig_608@F1         GLN_189@HE22     GLN_189@NE2       15       0.0008       2.9192     146.2273
lig_608@O2            SER_144@H       SER_144@N       10       0.0005       2.9259     148.8008
lig_608@N2             THR_26@H        THR_26@N        8       0.0004       2.9491     149.1861
lig_608@O2            GLU_166@H       GLU_166@N        4       0.0002       2.8839     150.1238
lig_608@N2         GLN_189@HE21     GLN_189@NE2        3       0.0001       2.9567     153.7993
lig_608@N2         ASN_119@HD21     ASN_119@ND2        2       0.0001       2.8564     147.7916
lig_608@O2            CYS_145@H       CYS_145@N        2       0.0001       2.8867     151.6423
lig_608@O1         GLN_189@HE21     GLN_189@NE2        2       0.0001       2.8888     148.3678
lig_608@N2            GLY_143@H       GLY_143@N        2       0.0001       2.9658     149.2518
lig_608@F1         GLN_189@HE21     GLN_189@NE2        1       0.0001       2.8675     139.9754
lig_608@F1            GLN_189@H       GLN_189@N        1       0.0001       2.8987     168.1758
lig_608@N2           HIE_41@HE2      HIE_41@NE2        1       0.0001       2.9411     147.0443

由此我需要考虑来自第三列(供体)和第五列(Frac)的信息,并打印数据的二维直方图,同时考虑大于 0.01 的值(第五列)。因此,在演示的示例中,仅应考虑以下数据:

#Donor                #Frac
GLU_166@N              0.6865 
HIE_163@NE2            0.4160
ASN_142@ND2            0.0788
THR_25@OG1             0.0109

并且 2D 直方图应该在 X 上绘制 #Donor,在 Y 上绘制 #Frac(以 % 为单位)

在我必须将以下几行添加到简化的 2D 数据文件之前,以便 Gracebat 可以将其识别为 2D 条形图:

@    title  \"No tittle\"
@    xaxis  label \"Donor\"
@    yaxis  label \"Frac\"
@s0 line type 0
@TYPE bar
# here is the data in 2 column format

是否可以自动化此类文件后处理以即时生成条形图?或者,我将感谢 sed 解决方案即时编辑数据文件以将其减少到 2 列并插入条形图绘图所需的开头@行,使用:

sed -i \'s/old-text/new-text/g\' datafile
  • 你应该看看AWK。它使处理列数据变得容易,并提供了在处理输入之前/之后打印文本的功能(BEGIN/END 部分)。

标签: bash sed xmgrace


【解决方案1】:

sed 不适用于此类任务,您应该使用 awk

awk  '
    BEGIN {
        print "@ title \"No title\""
        print "@ xaxis label \"Donor\""
        print "@ yaxis label \"Frac\""
        print "@s0 line type 0"
        print "@TYPE bar"
    }
    NR > 1 && $5 > 0.01 { print $3, $5 }
' file.txt

【讨论】:

  • 谢谢你!只是一个问题:是否可以忽略原始文件中的标题(第一行)或将#斜杠放在它之前,从而在输出中产生#Donor Frac?
  • @JamesStarlight 标头被$5 > 0.01 条件丢弃(文字字符串Frac 的数值为0)。如果要添加 #Donor Frac 行,则可以在 BEGIN 块中进行
  • 事实上,我刚刚在输出中测试了你的脚本 Donor Frac (without #) 这一行总是存在,尽管有这种情况(我也考虑过!)
  • @JamesStarlight 你说得对,awk 正在做字符串比较;我更新了我的答案以过滤掉第一行
  • 非常感谢!现在我有一个关于使用 Gracebat 可视化情节的问题 :-) 欢迎您也分享您的想法!
【解决方案2】:

您也可以使用即时生成的 Gnuplot 脚本来执行此操作,例如:

cat <<EOS | gnuplot > output.png
set term pngcairo size 1280,960
set xtics noenhanced
set xlabel "Frac"
set ylabel "Donor"
set key off
set style fill solid 0.5
set boxwidth 0.9
plot "<awk 'NR == 1 || \$5 > 0.01' infile.tsv" using 0:5:xtic(3) with boxes
EOS

这会产生一个 png 文件:

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多