gnuplot/ awk:为过滤后的数据绘制条形图

2024-02-01

我使用 gnuplot 结合 AWK 根据以下输入数据绘制 2D 条形图:

#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

我的脚本从第三列和第五列获取数据,仅考虑第五列的值 > 0.05 的行,生成条形图

cat <<EOS | gnuplot > graph.png
set term pngcairo size 800,600
set xtics noenhanced
set xlabel "Fraction, %"
set ylabel "H-bond donor, residue"
set key off
set style fill solid 0.5
set boxwidth 0.9
plot "<awk 'NR == 1 || \$5 > 0.05' $file" using 0:5:xtic(3) with boxes
EOS

!EDITED:在我的 bash 工作流程中,脚本看起来像

for file in "${output}"/${target}*.log ; do
 file_name3=$(basename "$file")
 file_name2="${file_name3/.log/}"
 file_name="${file_name2/${target}_/}"
echo "vizualisation with Gnuplot!"
cat <<EOS | gnuplot > ${output}/${file_name2}.png
set title "$file_name" font "Century,22" textcolor "#b8860b"
set tics font "Helvetica,12"
#set term pngcairo size 1280,960
set term pngcairo size 800,600
set yrange [0:1]
set xtics noenhanced
set xlabel "Fraction, %"
set ylabel "H-bond donor, residue"
set key off
set style fill solid 0.5
set boxwidth 0.9
plot "<awk 'NR == 1 || \$5 > 0.05' $file" using 0:5:xtic(3) with boxes
EOS
done

这是根据以下过滤数据生成的图像:

HIE_163@NE2 0.5304
GLU_166@N 0.5069
HIE_41@NE2 0.4792
lig_608@N1 0.4249
THR_26@N 0.3323

我需要修改集成在中的 awk 搜索表达式 gnuplot 从整个数据中选择两列。 而不是从每个的第三列(捐赠者)中获取索引 我需要从第一个(#Acceptor)中获取它,或者形成 第三栏(#Donor)。索引应该取自其中之一 列取决于 lig_* 模式。例如。如果数据在 (#Acceptor) 列从 lig* 开始,我需要从 同一行的第三列(#Donor)和签证诗句(lig*模式 出现在第一列或第三列中,但不在这两列中..) 以我的示例为例,经过更新的搜索后过滤后的数据应变为:

HIE_163@NE2 0.5304 # the first index from the third column
GLU_166@N 0.5069 # the first index from the third column
HIE_41@NE2 0.4792 # the first index from the third column
THR_26@O 0.4249 # !!!! the first index from the first column !!
THR_26@N 0.3323 # the first index from the third column

不需要 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:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gnuplot/ awk:为过滤后的数据绘制条形图 的相关文章

  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 如何访问 Gnuplot 的(自动)范围值并修改它们以添加一些边距?

    使用标准绘图命令 我得到了我想要的 除了yrange自动设置为从 例如 275 到 300 不幸的是 我有几个 y 坐标为 300 的数据点 因此它们不可见 由于边界线等原因 那么有什么办法可以设置最大yrange这样它始终是最大数据加上例
  • 使用 awk 打印一列,添加逗号

    我有一个文件 我想从中检索第一列 并在每个值之间添加逗号 Example AAAA 12345 xccvbn BBBB 43431 fkodks CCCC 51234 plafad 获得 AAAA BBBB CCCC 我决定使用 awk 所
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 如何调整ggplot直方图的时间刻度轴

    我正在使用一个数据框 其中一列包含POSIXct日期时间值 我正在尝试使用绘制这些时间戳的直方图ggplot2但我有两个问题 我不知道如何设置 binwidthgeom histogram 我想将每个垃圾箱设置为一天或一周 我尝试提供 di
  • 从 python 中的动态 mpld3 图中检索数据

    我想更新用于创建 mpld3 生成的 python matplotlib 列表图的输入数据 实际上 我有与此处发布的相同的问题 拖动后获取点信息 https stackoverflow com questions 24498322 mpld
  • Python 散点图。标记的大小和样式

    我有一组数据想要显示为散点图 我希望将每个点绘制为大小的正方形dx x 0 5 0 1 0 3 y 0 2 0 7 0 8 z 10 15 12 dx 0 05 0 2 0 1 scatter x y c z s dx marker s 问
  • 合并两个非常大的文件,忽略第一句

    我想将两个巨大的文件 每个几百兆字节 合并成一个文件 同时忽略第一行 我想使用 awk 因为我认为它应该是最优化的方式 我这样做的方式只忽略第二个文件的第一行 知道如何做工作或者是否有更快的方法 awk FNR NR FNR 1 next
  • Gnuplot 中的误差线拟合错误

    安装无错误 有效 我使用以下命令在 Gnuplot 5 0 中进行了简单的线性拟合 f x a x b fit f x file dat using 1 2 via a b 我得到输出 degrees of freedom FIT NDF
  • awk 维度上的累积和

    下午好 我想对 awk 中的每一列和每一行进行累积和 我的文件是 1 2 3 42 5 6 72 3 6 51 2 1 2 我想要 每列 1 2 3 43 7 9 115 10 15 166 12 16 186 12 16 18 我想要 每
  • 如何用seaborn绘制阴影误差带?

    我希望创建如下图 其中显示一些值和标准差 我有两组值 包含通过两种不同方法获得的平均值和标准差 我想这样做seaborn https seaborn pydata org index html 但我不知道具体该怎么做 因为官方示例 http
  • 第三行的总和并相应地划分行

    我有一个如下的文件 其中有 n 行 我想计算其总和 基于第三列 并将行相应地分布在 3 个不同的文件中 基于每个文件的总和 例如 如果我们将所有第三列值相加 则总数为 516 如果我们将其除以 3 则为 172 所以我想向文件添加一行 使其
  • 如果等于特定值则替换列

    我希望替换 CSV 中的第四列 如果它等于 N A 我正在尝试将其更改为 1 我似乎无法让它发挥作用 awk F if 4 N A 4 1 test csv 您可以使用以下内容awk awk F 4 4 N A 1 4 1 OFS test
  • 使用 R 以双对数刻度(以 10 为底)绘制分布的密度线

    我知道参数log xy 但我不知道你是否可以控制对数刻度的底数 我的猜测是 10 可能是默认值 而且我在下面的具体问题上并不幸运 我怎样才能重现以下情节 从这个来源 http www uvm edu pdodds teaching cour
  • gnuplot - 带有 histeps 的直方图连接条

    这是我正在使用的代码的最小工作示例 bin bash gnuplot lt lt EOF set term postscript portrait color enhanced set encoding iso 8859 1 set out
  • awk 在Linux终端中输出类似表格或类似Excel的列?

    我做了一个长管子 最后是 awk print 5 t t 3 t 4 在 Linux 终端中 这些列用选项卡填充 第一列条目具有不同数量的字符 因此第二列结果并不完全垂直 怎样才能让桌子看起来更完美呢 尝试将结果通过管道传输到列 t awk
  • 为seaborn lmplot添加文本注释

    我正在尝试为聚类结果创建seaborn lmplot 数据示例如下所示 ID CA IP clusters 38 10 3 5 6 1 59 10 4 6 1 0 64 10 0 6 6 1 35 10 6 5 6 1 54 10 6 5
  • 将线条剪裁到绘图区域并在绘图区域外显示文本

    我想限制绘图的可见 y 范围 为了保留超出此范围的值 我需要设置oob 出界 to rescale none这效果很好 不过 我还想在图外的页边空白处添加一些文本 为了做到这一点 我需要关闭剪辑 这会导致超出范围的值被绘制在绘图区域之外的边
  • Matlab中带误差条的直方图

    我想将误差条放在条形图中 每个条形上方 我试过 bincentres 85 10 85 nelements 1 4 14 24 46 57 63 63 174 147 69 49 22 9 4 2 1 0 err sqrt nelement
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a

随机推荐