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:为过滤后的数据绘制条形图 的相关文章

  • 在 R 中绘制 3D 数据

    我有一个 3D 数据集 data data frame x rep c 0 1 0 2 0 3 0 4 0 5 each 5 y rep c 1 2 3 4 5 5 data z runif 25 min data x data y 0 1
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后
  • 添加一条适合 R 中绘图峰值的曲线?

    如果给定两个向量及其图 是否有一个函数可以添加一条适合峰值的曲线 例如 我有 x c 0 20 X 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 y 1 19 4 17 9 8
  • 使用ggplot2绘制多条曲线

    假设我有一个数据框coefs其中每行包含曲线的模型系数 coefs lt structure list a1 c 1 22228259789383 1 2064168157394 1 09555089661994 0 94394743347
  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • python 中带有滑块的散点图

    嘿 我正在尝试使用滑块创建一个散点图 当我滑动时该滑块会更新该图 这是我到目前为止的代码 它绘制了一个散点图和一个滑块 但当我移动它时 什么也没有发生 我怀疑问题出在 set ydata有点 但我似乎无法在互联网上找到其他方法 import
  • R:as.double(y)中的错误:无法将类型“S4”强制为“double”类型的向量 - 光栅数据

    我在 Studio 中使用光栅工作 tif图像 我看过有关使用下面的代码绘制栅格的教程 但它对我不起作用 我收到错误 as double y 中的错误 无法将类型 S4 强制为 double 类型的向量 我已经加载了必要的包 raster
  • 如何在 PyQt5 GUI 中快速绘制 matplotlib 实时绘图

    几年前 我已经尝试过嵌入现场matplotlib中的情节PyQt5图形用户界面 实时绘图显示从传感器捕获的实时数据流 某些过程 我已经成功了 您可以在此处阅读相关帖子 您自己的 GUI 中的 Matplotlib 动画 https stac
  • 在 R markdown 中,如何防止非缓存块的绘图被单独保存?

    当编织 R markdown 文件时 从任何块输出的图cache TRUE独立于 HTML 输出保存 这对我来说很有意义 然而 如果即使是单个块也有cache TRUE选项集 all块 包括那些cache FALSE 将他们的地块独立保存
  • 如何有效地将多个 rgl 图连接成一个图?

    我用以下命令制作了 3D 绘图rgl打包我的数据的每个因子级别并将它们保存为 png 我的数据有 30 个不同的级别 从而产生了 30 个不同的图像文件 现在我想将这些 png 合并成一个图 我会这样显示它们 下面的例子说明了我想做的事情
  • 更改 ggplot 对象的数据集

    我正在绘制数据的子集ggplot2我想知道我是否会以某种方式使用已包含在ggplot原始数据子集中的对象 举个例子 这是第一个图 代码块 1 require ggplot2 p lt ggplot mtcars aes mpg wt col
  • pyplot,为什么x轴不显示?

    我正在尝试根据日期绘制一些值 但是 不幸的是我没有在 x 轴上获得任何值 我觉得这可能有两个因素造成 这些值存储为 日期 因此使过程变得复杂 由于日期将在 x 轴上占据太多空间 因此它变得太混乱 因此这就是为什么我只看到一条黑线 请让我知道
  • 在 RStudio 中循环期间绘图

    我正在 R 模拟退火 中实现旅行商问题 TSP 的解决方案 并且我想定期输出当前的最佳路径 我已经搜索了很多关于如何在for循环并迄今为止失败 我使用 RStudio 并希望查看生成的图表 如果您曾经看过 TSP 求解器的工作 您就会明白观
  • 从 shell 查找不包含特定注释的 XML 文件

    我想搜索 awk grep sed 几个 XML 文件 pom xml 文件 跳过某些文件夹 而且 第一个条件是它们必须包含标签
  • 如何绘制可变箭头和可变颜色?

    有没有办法让箭头和颜色可变 我知道我可以用不同的头定义不同的箭头样式 但是 如果我使用可变箭头样式 我无法设置可变颜色 我会得到一个错误 绘图选项中的参数重复或矛盾 显然 例如额外的lc rgb 0x123456无法覆盖选定的 arrows
  • 删除ggplot2中的负图区域[重复]

    这个问题在这里已经有答案了 如何删除 ggplot2 中 x 轴和 y 轴下方的绘图区域 请参见下面的示例 我尝试了几个主题元素 panel border panel margin plot margin 但没有任何运气 p lt ggpl
  • 线性判别分析图

    如何将样本 ID 行号 作为标签添加到此 LDA 图中的每个点 library MASS ldaobject lt lda Species data iris plot ldaobject panel function x y points
  • AWK数组初始化

    是否可以使用常见的方法在AWK中初始化数组list syntax array val1 val2 val3 或者是否必须使用索引值 syntax array 0 val1 array 1 val2 array 2 val3 不 不 您可以这
  • 为绘图制作 2D 图例 - 双变量分区统计图

    我一直在玩双变量 choropleth 地图 并且一直在如何创建类似于 2d 图例的问题上陷入困境约书亚 史蒂文斯 http www joshuastevens net cartography make a bivariate chorop
  • Mathematica PlotMarkers 中标记的自定义间隔

    我试图在 Mathematica ListLinePlot 的同一个图中绘制多个列表 并使用 PlotMarkers 和 PlotLegend 包来获取最终数字 问题是 Mathematica 为每个点都放置了一个标记 这使得很难判断哪个标

随机推荐