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