原标题:【绘图·高级】让“等高线图”闪耀你的文章
在观察二维数据表,特别是空间数据的时候,往往需要通过作图来给读者一个更为直观的认知。对于一个二维的数据表,如果要描述数值的高低,我们通常选用热图来表示,可是对于一些特定的地形数据,热图就有点捉襟见肘了。今天我们来学习一种新的图形,那就是“等高图”。没错,就是等高图,我们初中地理课上老师讲过的等高线图。等高图不仅可以应用在地理上,它还可以对于试验数据的空间分析,可以做一个非常直观、形象的判断。
可能很多人还没听见过等高图在科研数据中的应用,甚至没有听说过等高图。因此,我们还是从最基础的概念入手。因为等高线图是从地理应用开发出来的,所以为了更好地理解等高线图,我们还是从地理概念入手,然后再嫁接到科研数据中。
何为等高线
等高线指的是地形图上高程相等的相邻各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线,并垂直投影到一个水平面上,并按比例缩绘在图纸上,就得到等高线。等高线也可以看作是不同海拔高度的水平面与实际地面的交线,所以等高线是闭合曲线。在等高线上标注的数字为该等高线的海拔。
等高线的特征
1、位于同一等高线上的地面点,海拔高度相同(可以理解为,而且数据表中的数值高低相同)。但数值高度相同的点不一定位于同一条等高线上。
2、在同一幅图内,不同高程的等高线不能相交。
3、在图廓内相邻等高线的高差一般是相同的,因此地面坡度与等高线之间的等高线平距成反比,等高线平距愈小,等高线排列越密,说明地面坡度越大;等高线平距愈大,等高线排列越稀,则说明地面坡度愈小。
4、等高线是一条闭合的曲线,如果不能在同一幅内闭合,则必在相邻或者其他图幅内闭合。
实例绘图教学
我们从一个实际的例子入手,测试用的数据是一个二维数据表,每个单元格中的数值可以理解为检测到的某种观察值。二维表的部分数值如下图所示。(
完整测试数据见文末客服小姐姐二维码
)
下面我们就从最简单到最高级的方法来表述这个数据表中数值的高低变化。
一维·密度图
通过密度图(density plot)可以了解到数据分布的密度情况,类似于频率分布直方图,但是曲线更为圆润。在这里我们对密度图不做过多深入讲解,后续会有密度图的专文讲解。简单的密度图还是很容易绘制的,通过density函数即可。
二维·等高线图·初级
从一维的密度图中我们可以看出,大部分的数据集中在100-120这个区间之间,此外在130-150的位置也有一个小的集中区段。但是对于这样一个二维的数据表格,用一个一维的密度图来表示确实太过简单,数据的空间位置完全表达不出来,那怎们办呢?简单!通过contour()函数即可绘制一个直观的等高图。
是不是很高级!通过我们的科研数据居然可以用地理课上的等高线表示出来,而且很直观哦。整个二维表中,数值较高和较低的区域一目了然。
二维·等高线图·中级
上面这个图是通过base作图系统的contour()函数绘制出来的,非常直观,但是实话实说,有点“丑”,而且不同区域的数值高低也并不是非常明显。那怎么修改一下呢?简单!通过颜色标明不就行了。数值高的用暖色调,低的用冷色调。这样就更容易区分了。我们可以通过ggplot2包和ggisoband包来实现。
是不是看上去舒服了很多了呢?而且这个渐进的颜色也是R包自动配置好的,也不用我们自己做调整就很好看呢。
二维·等高线图·高级
前面是绘制了等高线,而且对等高线添加了不同颜色。可是对于追求CNS级别作图的我来说,这还是远远不够的,如果能够对不同数值区间进行着色,这样岂不是看上去对于数值的空间分布能加直截了当?的确如此,那应该怎么着色呢?就像前面我们说的,其实可以直接用绘制热图的方法来操作。
说白了就是用色阶/色块来表示数值高低,可以说就是未经层次聚类的热图(了解关于热图的更多内容)。我们甚至可以直接用Excel中的色阶来进行着色,结果如下图所示。
如果想用R语言来绘制热图的,可以参考我们之前的文章(【科研猫·绘图】今夏最热的“热图”)。这里我们言归正传,继续讲如何在等高线图中进行着色,这里我们用到一个函数就是R里面的image()函数,这可是一个非常好的函数,他能够根据数值高低对单元格进行着色。然后再加上等高线,就成了下图的样子。我们用R中的 terrain.colors()函数对其进行着色。
二维·等高线图·终级
看过我们绘图教程的各位都知道,我们的图都是朝着CNS级别去做的(虽然发不了CNS的文章),而且往往从初级-中级-高级之后还得有个“终极”绘图。那么,这次的等高线图“究极”升级之后是什么样子的呢?
我们先谈谈ggplot2。大家都知道ggplot2的图形是非常漂亮的,甚至在ggplot2的官方介绍中出现了“elegant”(优雅)这样的词汇,可见其图形是多么高级。因此,在我们的技术团队中,基本上是强制要求所有技术人员在绘图过程中的工具代码都要采用ggplot2系统。那么,对于填充了颜色的等高线图,如果用ggplot2加持一下,会是什么样子呢?擦亮双眼吧。
这种配色是不是很绝?估计如果让我们自己来调色的话,可能一辈子都调不出这么好看的颜色吧。
三维·等高线图
熟悉我们套路的同学都知道,“科研猫出品,必是精品”。一个东西,我们要么不讲,一旦讲了就会从头到尾讲的彻彻底底。所以,既然二维的等高图都讲到这种程度了,必须得给大家留个彩蛋。可能有同学也想到了,我们从“一维”画到了“二维”,那么接下来必然就是从“二维”到“三维”了。没错!就是三维图,虽然我们前面给大家讲过三维的散点图该怎么画(了解更多“三维散点图”),但是三维散点图相对于我们的这个二维数据表来说还是比较简单的。如果把平面的二维等高线图绘制成一个三维的地形图呢?
从等高线图的特征中我们知道,等高线越密集,数值相差越大,相反,等高线越稀疏,数值相差越小。可是,这个需要我们有强大的三维想象能力,从二维的等高线图中自己构想。要是能直接画个三维趋势图,不就完美了?
没问题!满足大家的愿望。在R中有很多三维绘图函数,其中有一个比较有名的就是persp()函数。我们的二维数据表用它来绘制三维图,结果是这样的。
好了,关于等高线图,我们今天先讲到这里。老规矩,代码和测试数据见文末客服二维码,根据客服操作即可领取。
- 等高线图代码及数据 -
关注“
科研猫
”公众号,
后台回复:客服
胖雨小姐姐
折耳猫小姐姐
返回搜狐,查看更多
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。