使用gnuplot绘制氢键数据的平行轴图

类别:    标签: gnuplot gmx   阅读次数:   版权: (CC) BY-NC-SA

较现代的数据分析和绘图工具中提供了很多新的绘图类型, 在论文中适当的采用一些不仅能够更直观地展现结果, 方便解读数据提供的信息, 传达自己的论点, 也可以锻炼自己图形表达的能力. 我们不能囿于工具, 只使用工具所支持的绘图类型, 而是要学着像设计师一样, 根据数据和要表达论点, 来设计一下采用哪种绘图方式更容易让人明白和接受你的论点. 另外, 绘制漂亮美观的图形对自己也是一种奖赏, 绘制出满意的图形, 就像画家完成一幅画, 诗人写完一首诗, 作曲家谱完一首曲子, 是一件令人愉悦的事, 虽然过程可能并没有那么令人愉悦.

前段时间偶然看到一种绘图类型, 桑基图, Sankey diagram, 有各种不同的形制和变体. 思考了一下, 觉得借用这种图用来表达分子模拟中常见的能量分析比较合适, 当然, 已经有些程序是这么做的了, 因为基本思想是简单的.

gnuplot目前是不支持绘制这种图的, 除非自己手动画. 不过, 它倒是支持平行轴图, 利用这种图, 我们可以近似的表达桑基图的思想, 这里就示例说明一下吧.

平行轴图的具体说明可以参考gnuplot手册和gnuplot in action中的说明, 这里不再啰嗦. 但使用时要注意gnuplot新旧版本的语法有差别.

示例复现

我们先来重复一个网上的示例图. 那里所给的脚本适用于5.2版本, 我们将它改成5.4版本的, 以测试/学习平行轴图的绘制方式.

pax.gpi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
grid_color    = "#d5e0c9"
text_color    = "#000000"
font_big      = ",105"
font_normal   = ",85"
font_small    = ",65"
font_smallest = ",55"

set palette defined (0 '#f7edf5', 0.8 '#c98abf' ,1 '#941680')

set style parallel lw 1
set style data parallelaxes

set paxis 1 range [] noreverse nowriteback
set paxis 2 range [] noreverse nowriteback
set paxis 3 range [] noreverse nowriteback
set paxis 4 range [] noreverse nowriteback
set paxis 5 range [] noreverse nowriteback
set paxis 6 range [] noreverse nowriteback

set paxis 1 tics 0.5 textcolor rgb text_color font font_smallest offset 1.5 right format "%1.1f"
set paxis 2 tics 0.5 textcolor rgb text_color font font_smallest offset 1.5 right format "%1.1f"
set paxis 3 tics 0.2 textcolor rgb text_color font font_smallest offset 0.  right format "%1.1f"
set paxis 4 tics 2   textcolor rgb text_color font font_smallest offset 1.5 right format "%1.0f"
set paxis 5 tics 10  textcolor rgb text_color font font_smallest offset 1.5 right format "%1.0f"
set paxis 6 tics     textcolor rgb text_color font font_smallest offset 1.5 right

set label 'Design Space' at screen 0.5,0.95 center textcolor rgb text_color font font_big

unset key
unset border
unset ytics

set xrange [0.75:6.25]
set xtics ("P1" 1, "P2" 2, "P3" 3, "P4" 4, "P5" 5, "Obj2" 6) \
	font font_small textcolor rgb text_color nomirror

set cbrange [0:0.55] noreverse nowriteback
set cbtics font font_smallest textcolor rgb text_color offset -1
set cblabel "Efficiency" font font_normal textcolor rgb text_color \
	rotate by -270 offset -2.5

set rmargin 0
set bmargin 1.5
set tmargin 2

plot "GenValid.csv" u 6:0 lw .01 lc pal, \
'' u 10, \
'' u 9 , \
'' u 7 , \
'' u 8 , \
'' u 5

新脚本中主要清除了无关的选项, 调整了字体大小和线宽. 因为我所用的默认设置与示例有所不同. 绘制的基本的效果是一样的, 是使用颜色表示线的强度.

氢键数据

理解了这种绘图方式之后, 我们就用它来绘制氢键分析数据. 在常规的MD分析中, 特别是使用AMBER的那些论文中, 常会有一个氢键分析表格, 列出所有比较重要的氢键, 给出施体/受体原子, 以及相应氢键在轨迹中的占有率. 我写过一个脚本gmx_hbdat, 可以基于GROMACS的氢键分析结果统计出类似的结果. 这种表格数据很多, 适合用于详细的对比, 但很不直观. 我们可以将它绘制成平行轴图, 只需要两个平行轴, 都代表残基编号或原子编号, 中间的连线代表氢键, 并用连线的颜色或宽度来表示氢键的占有率. 这样看一眼图, 就可以很直观地了解哪些氢键是主要的.

下面是一个示例, 1crn小蛋白水盒子, 简单模拟几个ns, 然后gmx hbond分析氢键, gmx_hbdat统计氢键信息, 根据统计结果将施体/受体原子所属残基抽取出来, 因为我后面使用残基编号来绘制, 而不是用原子编号. 基本数据类似

#Donor  Hydrogen  Acceptor  Occupancy%
1 THR    1 THR    1 THR         0.3
1 THR    1 THR    1 THR         0.1
1 THR    1 THR    2 THR         0.2
1 THR    1 THR   23 GLU         1.3
1 THR    1 THR   35 ILE        45.0
1 THR    1 THR   36 PRO         2.5
1 THR    1 THR   37 GLY         0.2
1 THR    1 THR    1 THR         0.1

使用下面的脚本来绘制平行轴图, 并使用颜色映射氢键占有率的大小, 因为gnuplot的平行轴图无法方便地改变线宽.

实际上, 对于这种只有两个轴的平行轴图, 使用常规的绘图方式来近似可能更容易, 只要在相应点之间绘制连线即可. 借助gnuplot提供的向量绘制方法, 我们很容易使用线宽来表示氢键的占有率.

扩展

论文图形的特点是精确, 自明, 信息丰富. 要想在上面的氢键分析图中提供更多信息, 可以将结构信息也集成进去. 比如, 对蛋白, 可以给出每个残基的名称(单字母或三字母), 每个原子的名称, 以及相应的二级结构, 甚至画上二级结构的示意图, 类似我以前的做法; 对配体, 可以给出原子名称. 即便这样, 比起类似LigPlot的图来说, 还是有所差距, 但好在可以显示所有可能的相互作用.

当然, 这种图也可以作成圆形的, 类似网络图, 但gnuplot暂时不支持这种圆形绘图模式, 只能自己画, 就先不考虑了.

◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 热图绘制中使用非均匀调色板
后一篇: 曾经的海

访问人次(2015年7月 9日起): | 最后更新: 2022-12-17 03:04:57 UTC | 版权所有 © 2008 - 2022 Jerkwin