R可视乎|等高线图

简介: 等高线图(contour map) 是可视化二维空间标量场的基本方法[1],可以将三维数据使用二维的方法可视化,同时用颜色视觉特征表示第三维数据,如地图上的等高线、天气预报中的等压线和等温线等。假设 是在点 处的数值,等值线是在二维数据场中满足 的空间点集按一定的顺序连接而成的线。数值为c的等值线可以将二维空间标量场分为两部分:如果 函数大于c,则该点在等值线内;反之,则该点在等值线外。

简介


等高线图(contour map)可视化二维空间标量场的基本方法[1],可以将三维数据使用二维的方法可视化,同时用颜色视觉特征表示第三维数据,如地图上的等高线、天气预报中的等压线和等温线等。假设  是在点  处的数值,等值线是在二维数据场中满足  的空间点集按一定的顺序连接而成的线。数值为c的等值线可以将二维空间标量场分为两部分:如果 函数大于c,则该点在等值线内;反之,则该点在等值线外。

#所需的包
library(reshape2) #数据处理相关
library(ggplot2) # 绘图相关
library(grDevices) #绘图颜色相关
library(RColorBrewer)#绘图颜色相关
library(directlabels) #等高线相关


数据介绍


数据为z,breaks_lines为之后需要绘图的间隔准备。

z <- as.matrix(read.table("等高线.txt",header=TRUE))
colnames(z) <- seq(1,ncol(z),by=1) #列名设置
max_z <- max(z)
min_z <- min(z)
breaks_lines <- seq(min(z),max(z),by=(max_z-min_z)/10)
map <- melt(z) #这个函数来自reshape2(处理数据的包)介绍一下这个函数,以及相关函数
dim(map)
colnames(map)<-c("Var1","Var2","value")

reshape2包中的melt()函数可将数据从左图转换呈右图的数据形式(下面图片可滑动查看!)。

含义:转换前第一行在转换后第一列为1,对应位置在第二列,第三列是对应值。

设置颜色调色盘,以后详细讲解。

rf <- colorRampPalette(rev(brewer.pal(11,'Spectral')))
colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)


热力分布图

使用ggplot2包中的geom_tile()或者geom_raster()绘制热 力分布图。其主要区别在于geom_raster()函数中存在interpolate=TRUE/FALSE这个参数,决定是否对热力图进行平滑处理。

这里使用geom_tile()进行演示,将三维数据(x,y,z)(x,y)表示位置信息,z映射到颜色。这里的scale_fill_gradientn()将颜色填充呈n个梯度。

  • 拓展:scale_*_gradient创建一个双色梯度(低-高),scale_*_gradient2创建一个渐变的颜色梯度(低-中-高),scale_*_gradientn创建一个n色梯度。
ggplot(map,aes(x=Var1,y=Var2,z=value))+
  geom_tile(aes(fill=value))+
  scale_fill_gradientn(colours=colormap)

C%ORF]HTE0%0HKK6{XIRV@Y.png


添加等高线

使用geom_contour()在上图基础上添加等高线,同一轮廓上的数值相同。

ggplot(map,aes(x=Var1,y=Var2,z=value))+
  geom_tile(aes(fill=value))+#根据高度填充
  scale_fill_gradientn(colours=colormap)+
  geom_contour(breaks=breaks_lines,color="black")+#
  labs(x="X-Axis",y="Y-Axis",fill="Z-Value")

image.gif

设置主题

对主题进行稍微的调整。改变x轴题目(axis.title,大小为15,字体形式为常规体face="plain",颜色黑色),x轴文字(axis.text),图例标题(legend.title)图例文字,(legend.text),(图例背景legend.background),图例位置(legend.position)

Contour <- ggplot(map,aes(x=Var1,y=Var2,z=value))+
  geom_tile(aes(fill=value))+#根据高度填充
  scale_fill_gradientn(colours=colormap)+
  geom_contour(breaks=breaks_lines,color="black")+#
  labs(x="X-Axis",y="Y-Axis",fill="Z-Value")+
  theme(
    axis.title = element_text(size=15,face="plain",color="black"),
    axis.text = element_text(size=13,face="plain",color="black"),
    legend.title = element_text(size=13,face="plain",color="black"),
    legend.text = element_text(size=11,face="plain",color="black"),
    legend.background = element_blank(),
    legend.position = c(0.15,0.2)
  )
Contour

拓展:face还可以设置其他字体形式:plain(常规体)、bold(粗体)、italic(斜体)、bold.italic(粗斜体)

BS]L[7_I99}PFYE@0JB7{7V.png


添加等高线的具体数值

在上面的图基础上,利用directlabels包的direct.label()添加等高线的具体数值,从而不需要颜色映射的图例,同一轮廓上的数值相同。

作用:在二维屏幕上,等高线可以有效地表达相同数值的区域,揭示走势和陡峭程度及两者之间的关系,寻找坡、峰、谷等形状。

direct.label(Contour, list("bottom.pieces", cex=0.8,
             fontface="plain", fontfamily="serif", colour='black'))

C594F7PWY}Q5@CIV[_5%WJ9.png

以上对绘制等高线进行了详细介绍了,如果还需进一步了解,可参考一下网上免费开源资料:Using 2D Contour Plots within {ggplot2} to Visualize Relationships between Three Variables[2],A guide to contour maps[3],Contour Plots in R[4]

本篇视为《R语言数据可视化之美》学习笔记,并进行函数详细介绍与解释,其他可视化图可参考在菜单命令中搜索得到。对应代码与相关数据,请在我的github中获取(文末原文)。喜欢请一键三连,创作不易,感恩不尽。

目录
相关文章
|
8月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
55 0
Mysql基础第二十六天,使用存储过程
|
8月前
|
关系型数据库 MySQL
Mysql基础第四天,Mysql数据类型
Mysql基础第四天,Mysql数据类型
46 0
Mysql基础第四天,Mysql数据类型
|
8月前
|
关系型数据库 MySQL 数据库
Mysql基础第三十二天,数据库维护
Mysql基础第三十二天,数据库维护
89 0
|
8月前
|
存储 SQL JSON
晓得不,中间表是这样被消灭的
晓得不,中间表是这样被消灭的
|
前端开发 JavaScript
用Transition组件犯迷糊?看我这篇给你安排的明明白白的
transition组件作为Vue的内置组件,可以用来实现组件的过渡效果。在Vue中,过渡效果是通过CSS来实现的,所以过渡不是如何使用组件,而是如何写CSS。
150 0
用Transition组件犯迷糊?看我这篇给你安排的明明白白的
有点迷糊的题
2541. 使数组中所有元素相等的最小操作数 II - 力扣(LeetCode)
79 0
|
机器学习/深度学习 弹性计算 算法
一直在说的冷启动,究竟是个啥子呦!
Serverless架构发展速度是飞速的,收到很多人的追捧同时也暴露出来了很多严峻的问题,例如冷启动的问题就是老生常谈的。那么什么是函数计算的冷启动你了解么?他是如何产生又要如何规避/缓解呢?
938 2
|
数据可视化
R可视乎|克利夫兰点图系列
在可靠性实验中,不同产品的测试失效时间可以通过克利夫兰点图进行可视化,今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1],并结合我实际使用经验进行修改。
340 0
|
数据可视化 C语言
R可视乎|合并多幅图形
通常而言,在绘制图形的时候都是绘制某一种类型的一张图形,例如绘制一张散点图,绘制直方图。但有的时候我们希望同时展示多幅图形,可能是因为这些图形有某种联系,需要共同展示才能够更好的表达数据中蕴含的信息。之前介绍的边际图形就是这样的一个例子。本章节会介绍,当我们绘制了好了多幅图形之后,如何将多幅图形合并起来。
1785 0
R可视乎|合并多幅图形
|
存储 算法 数据可视化
R可视乎 | 散点图系列(1)
散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较数值。散点图是使用一系列的散点在直角坐标系中展示变量的数值分布。在二维散点图中,可以通过观察两个变量的数据变化,发现两者的关系与相关性。
421 0