等高线图
2018-09-03
2018-09-03
1 数据集准备
该数据集为怀俄州明黄石公园老忠实间歇泉喷发与喷发持续时间的对比研究
library(ggplot2)
str(faithful)
## 'data.frame': 272 obs. of 2 variables:
## $ eruptions: num 3.6 1.8 3.33 2.28 4.53 ...
## $ waiting : num 79 54 74 62 85 55 88 85 51 85 ...
eruptions:喷发的数字喷发时间
waiting :表示数字等待时间到下一次爆发(分钟)
利用ggplot绘制等高线图,其基本语法为:
ggplot(数据集, aes(x = 自变量, y = 因变量)) +geom_point() +stat_density2d()
其中:aes(x, y)表示变量的坐标,geom_point() 表示绘制散点,stat_density2d()表示绘制密度图函数
ggplot(faithful, aes(x = eruptions, y = waiting)) +
geom_point() + stat_density2d()
2 添加颜色
stat_density2d(aes(colour = ..level..))表示给密度图函数:colour设置等高线颜色
ggplot(faithful, aes(x = eruptions, y = waiting)) +
stat_density2d(aes(colour = ..level..))
3 辅助加工
可以将密度变量映射到透明度来渲染,R语言实现代码如下:
ggplot(faithful, aes(x = eruptions, y = waiting)) +
geom_point() + # 散点图函数
stat_density2d(aes(alpha = ..density..), geom = "raster", contour = FALSE) # 密度图函数:alpha设置填充透明度数据为密度,geom设置绘制栅格图
图形一:
require(grDevices) # for colours
x <- -6:16 # 设置向量
op <- par(mfrow = c(2, 2)) # 设置图形为2*2的格式
contour(outer(x, x), method = "edge", vfont = c("sans serif", "plain"))
z <- outer(x, sqrt(abs(x)), FUN = "/")
image(x, x, z) #设置三元图
contour(x, x, z, col = "pink", add = TRUE, method = "edge",#密度的等高线曲线图
vfont = c("sans serif", "plain"))
contour(x, x, z, ylim = c(1, 6), method = "simple", labcex = 1,
xlab = quote(x[1]), ylab = quote(x[2]))
contour(x, x, z, ylim = c(-6, 6), nlev = 20, lty = 2, method = "simple",
main = "20 levels; \"simple\" labelling method")
图形二:
## Persian Rug Art:
x <- y <- seq(-4*pi, 4*pi, len = 27)
r <- sqrt(outer(x^2, y^2, "+"))
opar <- par(mfrow = c(2, 2), mar = rep(0, 4))
for(f in pi^(0:3))
contour(cos(r^2)*exp(-r/f),#密度的等高线曲线图
drawlabels = FALSE, axes = FALSE, frame = TRUE)
图形三:
x1 <-3;x2 <-6;x3<-9
n <- 10000
y1 <-rnorm(n,0,x1) #随机正态分布
y2 <-rnorm(n,0,x2)
y3 <-rnorm(n,0,x3)
x<-c(rep(x1,n),rep(x2,n),rep(x3,n))
y <- c(y1,y2,y3)
z<-c(dnorm(y1,0,x1),dnorm(y2,0,x2),dnorm(y3,0,x3))
ma.dat <-data.frame(x=x,y=y,z=z)
library(scatterplot3d) #加载三维包
var3d <-scatterplot3d(ma.dat,type="p",lwd=2,pch=46,box=FALSE,x.ticklabs=c(1,NA,2,NA,3),scale.y=1)
图形四:等高线图
win.graph()
data(volcano) #加载火山数据集
grey_gamma <- 2.2
grys <- grey.colors(8, 0.55, 0.95, grey_gamma)
layout(matrix(c(1,2,1,3,1,4),3,2,byrow=TRUE), c(3,1))
image(volcano, axes=F, col=terrain.colors(100),, asp=1, main="a")
contour(volcano, add=T)
图形五:山体等高线图
win.graph()
data(volcano)#加载火山数据集
#设置高程值
z <- volcano
#x坐标,每个网格为10米分辨率,方向由南向北
x <- 10*(1:nrow(z))
#y坐标,每个网格为10米分辨率,方向由东向西
y <- 10*(1:ncol(z))
## 二维可视化:栅格+等高线(见图片1)
par(mar=rep(0.5,4))
image(x, y, z, col=terrain.colors(100), axes=F)
contour(x, y, z, levels=seq(from=min(z), to=max(z), by=10),axes=F, add=T)
## 三维可视化(见图片2)
par(mar=rep(0,4))
#三维网格模式显示(白膜)
persp(x,y,z,theta=120,phi=15,scale=F,axes=F)
## 带色带的三维模式渲染(见图片3)
#设置高程值为2倍拉伸
z <- 2 * volcano
x <- 10 * (1:nrow(z))
y <- 10 * (1:ncol(z))
## 创建一份新的用于绘制的网格数据集
#z0是用于设置栅格边缘的颜色
z0 <- min(z) - 20
#用z0的颜色,把整个栅格包裹起来
z <- rbind(z0, cbind(z0, z, z0), z0)
#用x的最小值和最大值,把x包裹起来,对应上面那个z0
x <- c(min(x) - 1e-10, x, max(x) + 1e-10)
#用y的最小值和最大值,把x包裹起来,对应上面那个z0
y <- c(min(y) - 1e-10, y, max(y) + 1e-10)
## 创建用于显示颜色的矩阵
#默认全部使用绿色
fcol <- matrix("green3", nr = nrow(z)-1, nc = ncol(z)-1)
#用灰色把所有的绿色都包裹起来,即设置四周的边界值
fcol[ , i2 <- c(1,ncol(fcol))] <- "gray"
fcol[i1 <- c(1,nrow(fcol)) , ] <- "gray"
## Take average of four neighboring values for palette
##将上面设置的默认色,用都取相邻的四个格网颜色的平均值进行替换
zi <- (volcano[ -1,-1] + volcano[ -1,-61] + volcano[-87,-1] + volcano[-87,-61])/4
pal <- terrain.colors(20)[cut(zi, quantile(zi, seq(0,1, len = 21)), include.lowest = TRUE)]
fcol[-i1,-i2] <- pal
## 绘图
par(mar=rep(0,4))
persp(x, y, z, theta=120, phi=15, col = fcol, scale = FALSE, shade = 0.4, border = NA) #三维可视化
4 本章汇总
参数 | 类别 | 功能 |
---|---|---|
ggplot2 | 包 | 图形的绘制 |
geom_point | 函数 | 绘制散点 |
stat_density2d | 函数 | 绘制密度图函数 |
contour | 函数 | 密度的等高线曲线图 |
rnorm | 函数 | 随机正态分布 |
matrix | 函数 | 矩阵 |