最近学习R语言,知识点比较多,所以在此总结一下。这部分主要说下R语言的绘图以及一些处理函数,命令偏数学的多一些,毕竟R语言一开始就是为了统计设计的嘛。
P.S. 由于我使用了R Markdown来写R程序,导致代码下面的两个"##"后面为命令运行结果。
常见的数学函数以及统计函数;
统计绘图函数(直方图、核密度图、箱线图、正态QQ图、茎叶图、经验分布图等)
高水平绘图函数(plot、coplot、pairs、qqnorm、contour、persp等)
高水平绘图命令(add, axes, log, type等)
低水平绘图函数与参数设置
用于表示频数的分布
# 基本的直方图绘制 x <- mtcars$mpg; x ## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 ## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 ## [31] 15.0 21.4 hist(x) # 参数的设置, breaks表示分成的组数,默认y轴表示频数 hist(x, breaks = 12, col = "red", xlab = "Miles Per Callon") # freq=F 设置y轴表示概率密度 hist(x, freq = F, breaks = 12, col = "green", xlab = "Miles Per Callon") # 轴须图绘制 rug(jitter(x)) # 添加噪声 lines(density(x), col = "red", lwd = 2) # 频率变化情况观察连续型变量的分布的工具 x轴展现的值,y轴表示值在所有数据中出现的密度(概率)情况
x <- density(mtcars$mpg); x ## ## Call: ## density.default(x = mtcars$mpg) ## ## Data: mtcars$mpg (32 obs.); Bandwidth 'bw' = 2.477 ## ## x y ## Min. : 2.97 Min. :6.481e-05 ## 1st Qu.:12.56 1st Qu.:5.461e-03 ## Median :22.15 Median :1.926e-02 ## Mean :22.15 Mean :2.604e-02 ## 3rd Qu.:31.74 3rd Qu.:4.530e-02 ## Max. :41.33 Max. :6.795e-02 plot(x) attach(mtcars) library(sm) sm.density.compare(mpg, cyl, xlab = "Miles Per Gallon")适合连续型分布的场合
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0); w ## [1] 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0 # 五数总括,计算数据中的两个最值与三个分位数 fivenum(w) ## [1] 47.40 57.85 63.50 66.75 75.00 # 经验分布图的绘制 ecdf(w) # 计算由经验分布函数得到的数值型向量 ## Empirical CDF ## Call: ecdf(w) ## x[1:13] = 47.4, 50, 56.9, ..., 72, 75 plot(ecdf(w),verticals = TRUE, do.p = TRUE) x <- 44:78 lines(x, pnorm(x, mean(w), sd(w)))正态分布的分布函数的反函数,为0-1上的均匀分布
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0); w ## [1] 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0 qqnorm(w) qqline(w)高水平作图函数有:plot(), coplot(), pairs(), qqnorm(), qqline(), hist(), contour()等,可以产生图形,定制参数; 而低水平作图函数自身无法生成图形,只能在高水平作图函数基础上增加新的图形。
有四种绘图方法:两向量的散点图、时间序列散点图(单向量关于下标的散点图复数向量的散点图)、因子的箱线图、不同指标构成的散点图(回归诊断图等)。
x <- c(1,3,2,3,3,5); y <- c(3,2,3,4,5,6); z <- complex(re = x, im = y); plot(x) plot(x, y) plot(z) # 因子的箱线图 y<-c(1600, 1610, 1650, 1680, 1700, 1700, 1780, 1500, 1640, 1400, 1700, 1750, 1640, 1550, 1600, 1620, 1640, 1600, 1740, 1800, 1510, 1520, 1530, 1570, 1640, 1600) f<-factor(c(rep(1,7),rep(2,5), rep(3,8), rep(4,6))) plot(f,y) # 数据框的指标构成的散点图 df<-data.frame( Age=c(13, 13, 14, 12, 12, 15, 11, 15, 14, 14, 14, 15, 12, 13, 12, 16, 12, 11, 15 ), Height=c(56.5, 65.3, 64.3, 56.3, 59.8, 66.5, 51.3, 62.5, 62.8, 69.0, 63.5, 67.0, 57.3, 62.5, 59.0, 72.0, 64.8, 57.5, 66.5), Weight=c( 84.0, 98.0, 90.0, 77.0, 84.5, 112.0, 50.5, 112.5, 102.5, 112.5, 102.5, 133.0, 83.0, 84.0, 99.5, 150.0, 128.0, 85.0, 112.0)) plot(df) attach(df) # 身高与年龄指标的散点图 plot(~Age+Height) # 体重分别与年龄和身高的散点图 plot(Weight~Age+Height) 绘制多变量数据的函数pairs()函数,数据为矩阵或数据框时绘制矩阵关于其各列的散布图 coplot()函数,绘制更细致的散点图,也可以表示各列指标的关系
# 与plot()函数的结果一致,为箱线图 pairs(df) # 绘制指标散点图,下面是按年龄划分的体重与身高的散点图 coplot(Weight ~ Height | Age) qqnorm(), hist(), dotchart(), contour(), image(), persp()等dotchart()函数绘制数据x的点图
# Virginia州在1940年的人口死亡率点图 dotchart(VADeaths, main = "Death Rates in Virginia - 1940") dotchart(t(VADeaths), main = "Death Rates in Virginia - 1940")contour(), image(), persp()函数绘制山区的等高线图
x <- seq(0,2800, 400); y <- seq(0,2400,400); z <- c(1180,1320,1450,1420,1400,1300,700,900, 1230,1390,1500,1500,1400,900,1100,1060, 1270,1500,1200,1100,1350,1450,1200,1150, 1370,1500,1200,1100,1550,1600,1550,1380, 1460,1500,1550,1600,1550,1600,1600,1600, 1450,1480,1500,1550,1510,1430,1300,1200, 1430,1450,1470,1320,1280,1200,1080,940) Z <- matrix(z, nrow = 8) # 绘制image图 image(x, y, Z) # 绘制等高线图 contour(x, y, Z, levels = seq(min(z), max(z), by = 50)) # 绘制3D曲面 persp(x, y, Z, theta=30, phi=45, expand=.3)原图上添加新图:add=T, 默认为F,即直接替换原图 显示坐标轴:axes=F, 默认为T,即显示坐标轴
contour(x, y, Z) contour(x, y, Z, levels = seq(min(z), max(z), by = 80), col=5, add=T) contour(x, y, Z, levels = seq(min(z), max(z), by = 50), axes=F) 数据取对数对x轴取对数:log="x" 对y轴取对数:log="y" 对x和y轴同时取对数:log="xy"
x1 <- 1:10; x2 <- 4:13; plot(x1, x2, log="x") plot(x1, x2, log="xy", col=3) type命令 设定绘制散点图的参数 默认:type="p" 实线图:type="l" 点被实线连接(不穿过点):type="b" 实线穿过所有的点:type="o" 通过x轴作垂线:type="h" 绘制阶梯型曲线:type="s" 不绘制任何的点和曲线:type="n" x1 <- 1:10; x2 <- 4:13; plot(x1, x2, type = "s") 其他绘图时的命令pch:设定绘图时的符号 cex:设定符号的大小(相对于图形的大小, 数值表示) lty:设定线形 lwd:设定线宽 xlab(ylab):轴标题 main:主标题 sub:子标题
x1 <- 1:10; x2 <- 4:13; plot(x1, x2, pch=12, cex=3, lty=2, lwd=2, col="red", xlab="x轴", ylab="y轴", main="直线", sub="小线")points():加点 lines():连线 text():在图上的点处添加标记 abline():在图上加直线,abline(a, b)表示绘制 y = b x + a y=bx+a y=bx+a的直线,h=y和v=x分别表示平行于坐标轴的直线 title(main="", sub=""):在图上添加标记、说明或其他内容 axis(side):side的1、2、3、4表示下、左、上、右 legend(title, location):添加图例
x <- 1:10; y <- 4:13; plot(x, y) xp <- c(8, 3, 4); yp <- c(9, 10, 5); points(xp, yp, pch=16, col="green") lines(xp, yp, pch=16, col="blue") text(x, y) abline(3,4) legend("topleft", inset = .01, "图例", c("A", "B"), lty=c(1, 2), pch=c(15, 17))