R语言:填色等值线图及其色标(color bar)设置
来源:互联网 发布:天气软件找不到列治文 编辑:程序博客网 时间:2024/06/06 04:16
更多填色等值线图的绘制请参考R语言:如何在一张图上画多个填色等值线图
在气象数据分析中,经常用填色等值线图来表现气象要素的空间分布特点,例如下图中给出了1997年12月的海表温度异常(SSTA)的空间分布情况:
在R语言中,这种图可以使用filled.contour函数绘制:
filled.contour( x = seq(0, 1, length.out = nrow(z)),
y = seq(0, 1, length.out =ncol(z)),
z,
xlim = range(x, finite = TRUE),
ylim = range(y, finite = TRUE),
zlim = range(z, finite = TRUE),
levels = pretty(zlim, nlevels), nlevels = 20,
color.palette = cm.colors,
col = color.palette(length(levels) - 1),
plot.title, plot.axes, key.title,key.axes,
asp = NA, xaxs = "i", yaxs = "i", las = 1,
axes = TRUE, frame.plot = axes, ...)
其主要参数如下:
z即为将要呈现的数据,其须是数值型(numeric)的矩阵格式(matrix);
x和y分别是X轴和Y轴的格点刻度,注意x和y的长度必须与z的维度相匹配,且x和y序列必须为升序排列;
xlim,ylim和zlim分别是绘图中最终显示出来的x,y和z的范围;
levels是色标的刻度;
nlevels即是色标刻度的数目,也就等于levels的长度(levels和nlevels如果只设置了一个,另一个将会自动生成);
color.palette是调色板函数,默认值为浅蓝洋红色系;
col即是色标上显示的不同颜色,若col未人工设置,将根据levels,nlevels以及color.palette自动生成;
plot.title和plot.axes用于调整主图的标题和坐标轴刻度;
key.title和key.axes用于调整色标的标题和刻度;
asp是指作图的高宽比(y/x);
xaxs和yaxs分别是X轴和Y轴的刻度线类型;
las指坐标轴刻度标签的文字书写方向,默认值为1,表示刻度标签从左到右横向书写。
filled.contour函数最少只需数据z即可绘制,我们以1997年12月的SSTA数据为例(数据的读取可参考NC数据的读写),代码和结果如下图:
z <- ssta_1997_12filled.contour(z = z)
更加细致的绘图需要设定更多的参数:
x <- seq(from = 98.5, to = 288.5, by =1)y <- seq(from = -20.5, to = 20.5, by =1)z <- sst_a[, 42:1, 12, 17]levels <- seq(-6, 6, 1)filled.contour(x = x, y = y, z = z, levels= levels, las = 1, plot.title = title(main ="Dec 1997", cex.main = 2), plot.axes = list(axis(1,seq(100, 160, by = 20), c('100E', NA, '140E', NA)), axis(1, 180,180), axis(1,seq(200, 280, by = 20), c(NA, '140W', NA, '100W', NA)), axis(2,seq(-20, 20, by = 10), c('20S', '10S', 'Eq', '10N', '20N'))), key.title = title(main ='degC'))
然而浅蓝洋红色系给出的对比效果并不明显,如需提高对比度则应调整调色板函数。
R语言自带了5种连续型色彩渐变调色板函数:
rainbow
heat.colors
terrain.colors
topo.colors
cm.colors
其中cm.colors即是filled.contour中默认使用的浅蓝洋红色系调色板。
接下来我们看一下各个色系的颜色:
## plot_col函数用来显示不同调色板下的色彩变化plot_col <- function (nlev, col) { plot(x = c(1, (nlev + 1)), y = c(1, 2), xaxs = 'i', yaxs = 'i', xaxt = 'n', yaxt = 'n', type = 'n', ann = F) rect(xleft = 1:nlev, ybottom = rep(0, (nlev + 1)), xright = 2:(nlev + 1), ytop = rep(2, (nlev + 1)), col = col, border = 1) par(new = T) plot(x = c(1, (nlev + 1)), y = c(1, 2), xaxs = 'i', yaxs = 'i', xaxt = 'n', yaxt = 'n', type = 'n', ann = F)}nlev <- 12col <- cm.colors(nlev)plot_col(nlev, col)
col <- heat.colors(nlev)plot_col(nlev, col)
col <- terrain.colors(nlev)plot_col(nlev, col)
col <- topo.colors(nlev)plot_col(nlev, col)
col <- rainbow(nlev)plot_col(nlev, col)
如果需要其他色系的调色板,比如文章开头给出的红蓝色系,则可以使用colorRampPalette函数定制。
colorRampPalette ( colors, bias = 1, space= c("rgb", "Lab"),
interpolate =c("linear", "spline"), alpha = FALSE)
其最主要的参数colors是要生成的调色板色系的基础颜色(需是颜色名称或颜色十六进制编码),以文章开头的红蓝色系为例:
colors <- c('blue', "white",'red')RB <- colorRampPalette(colors = colors)col <- RB(nlev)plot_col(nlev, col)
其余参数则对颜色渐变的方式做出调整,
bias取值需大于0,当其大于1时,生成的颜色中趋向于colors参数中后部的颜色更多,小于1时,生成的颜色中趋向于colors参数中前部的颜色更多;
space和interpolate表示不同的颜色生成方式和插值方式;
alpha调节透明度。
将filled.contour中的color.palette参数改为刚才我们利用colorRampPalette函数生成的红白色系调色板R函数即可得到文章开头的填色等值线图。
filled.contour(x = x, y = y, z = z, levels= levels, color.palette = RB, las = 1, plot.title = title(main ="Dec 1997", cex.main = 2), plot.axes = list(axis(1,seq(100, 160, by = 20), c('100E', NA, '140E', NA)), axis(1, 180,180), axis(1,seq(200, 280, by = 20), c(NA, '140W', NA, '100W', NA)), axis(2,seq(-20, 20, by = 10), c('20S', '10S', 'Eq', '10N', '20N'))), key.title = title(main ='degC'))
如果在设置colorRampPalette的colors参数时不知道颜色的名称,也可以采用十六进制颜色编码,颜色编码可以通过rgb函数获得,例如,红色的编码:
其中红色的rgb值(255, 0, 0)既可以从网上搜索,也可以使用QQ或微信截图获得,具体操作方式是,在QQ或微信截图界面下,将鼠标移至某色块上,即自动出现该色块的rgb值。
更多填色等值线图的绘制请参考R语言:如何在一张图上画多个填色等值线图
- R语言:填色等值线图及其色标(color bar)设置
- R语言:如何在一张图上画多个填色等值线图
- R语言绘制箱线图
- R语言绘制K线图
- r语言之极坐标线图
- R语言绘制K线图
- Navigation Bar色设置
- R 语言中的 箱线图介绍 boxplot
- R语言绘制股票K线图
- 【R语言学习笔记】探索ggplot的排列组合:线图(一)
- R语言绘制均线图SMA的交叉点
- 如何用matlab和R语言画K线图
- R语言:ggplot做条形图和线图尝试
- VB 调用surfer生成的等值线图。
- arcgis10.2做等值线图制作方法
- arcgis10.3降雨量等值线图制作过程
- R箱线图
- R之箱线图
- Java常见API-object、string、StringBuffer
- 以笔记本为工具的时间管理法(笔记)
- 自己动手,写一个简单的线程池(1)
- 配置geoDjango
- 2stackToQueue
- R语言:填色等值线图及其色标(color bar)设置
- 指针的总结好文转载
- yum常见命令
- Redis主从复制
- LeetCode基础-Stack
- django+celery+redis实现运行定时任务
- ansible——inventory文件
- return的应用
- 开源框架:JFinal框架