使用gnuplot绘制山体阴影图

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

在使用三维数据绘制热图, 高程图或形貌图(也称景观图)时, 一般会使用颜色映射. 如果所用绘图程序支持3D渲染, 可以直接绘制3D图并开启灯光进行渲染, 这样得到的图看起来更真实. gnuplot虽然支持3D绘制也可以设置灯光进行渲染, 但效果并不出众, 所以一般不怎么用它来做比较复杂的3D效果图.

以前在使用gnuplot绘制地图时, 我曾提到, 在地图绘制中常使用拟3D的作法来表现地形的高低起伏, 坡度变化. 这种图英文称为hillshade, 中译为山体阴影图, 坡度图或晕染图. 采用这种方式绘制的地图有一定的立体感, 虽然精确度相比直接的颜色映射图有所降低, 但更直观, 看起来也更精致些.

山体阴影图的具体的原理和计算方法可以参考以下资料, 这里就不多啰嗦了:

本质上, 这是一种最简单的光照模型, 模拟了平行光照射下高低山坡所留下的阴影. 我觉得将其用于MD论文中常见的自由能形貌图可能比较合适, 这样得到的图可能更直观, 效果也可能会有提升. 所以我就尝试使用gnuplot绘制这种图. 如果可行, 可以考虑将其集成到我的xpm2all脚本中.

代码

照arcgis的说明英文 中文实现即可, 没什么难度. 需要指出的是, 对于示例说明给出的数据

2450 2461 2483
2452 2461 2483
2447 2455 2477

最后所给的结果不对, 因为有个数值代入错了.

绘制的时候涉及到不同颜色的混合. 颜色混合, 透明度混合的原理, 可以参考:

颜色的混合模式有很多, 可以参考Photoshop中的图层功能, 以下是一些说明:

gnuplot暂时不支持比较复杂的颜色混合, 需要自己写函数来实现, 具体的方法可以参考:

测试

现在来看看添加山体阴影对不同数据的效果.

连续函数

使用matlab的peak函数

\[╤ z &=3 (1-x)^2 ℮^{-x^2-(y+1)^2} \\ &-10 ({x/5}-x^3-y^5)℮^{-x^2-y^2} \\ &-{1/3} ℮^{-(x+1)^2-y^2} ╧\]

x, y范围[-4:4], 步长0.05.

下面为绘制的原始填色图, 山体阴影图, 以及二者的混合图(填色图透明度60%).

对这种连续, 变化不显著的数据, 添加山体阴影后效果并没有太大提高.

高程数据

下面是山东临沂地区的高程数据, 混合比例80%.

对这种实际地形数据, 添加山体阴影有一定效果, 毕竟这种方法就是为了更好地展示这种数据而设计的.

自由能数据

简单的1crn蛋白水溶液模拟, 使用RMSD和回旋半径做分量, gmx sham计算自由能数据. 由于模拟时间很短, 所得自由能分辨率不高, 波动很大, 所以进行了简单的平滑. 混合比例80%.

看起来效果还可以, 比直接的填色图格调高一格吧, 用在论文中应该有一定效果.

扩展

类似这种模式的图还可以有其他的扩展, 可以参考下面的一些说明:

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


前一篇: 力场拟合工具xff开发杂记
后一篇: 颜色空间与颜色混合

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