学习R语言:基础绘图

目录

本文内容来自《R 语言编程艺术》(The Art of R Programming),有部分修改

介绍 R 基础绘图包的基本功能。

注:R 语言更常用的绘图包是 ggplot2。笔者后续会进一步学习 ggplot2 的相关功能。

创建图形

plot() 函数

基础图形系统的核心:plot() 函数

plot() 是泛型函数

plot(c(1, 2, 3), c(1, 2, 4))

plot() 函数分阶段执行。type="n" 表示不添加任何元素

plot(
  c(-3, 3),
  c(-1, 5),
  type="n",
  xlab="x",
  ylab="y"
)

添加线条:abline() 函数

abline() 使用截距和斜率绘制直线

x <- 1:3
y <- c(1, 3, 8)
plot(x, y)
lmout <- lm(y ~ x)
abline(lmout)

$$ y = 2 + 1 \cdot x $$

plot(
  c(-3, 3),
  c(-1, 5),
  type="n",
  xlab="x",
  ylab="y"
)
abline(c(2, 1))

lines() 函数

plot(
  c(1, 3),
  c(2, 4),
  type="n",
  xlab="x",
  ylab="y"
)
lines(c(1.5, 2.5), c(3, 3))
plot(
  c(1, 2, 3), 
  c(1, 2, 4),
  type="l"
)

扩展案例:在一张图中绘制两条密度曲线

density() 函数计算密度曲线的估计值

scores <- read.csv("../data/student-mat.csv", header=TRUE)
d1 <- density(scores$G1, from=0, to=20)
d2 <- density(scores$G2, from=0, to=20)
plot(d2, main="", xlab="")
lines(d1)

添加点:points() 函数

plot(
  c(0, 20), c(0, 20), 
  type="n",
  xlab="G1",
  ylab="G3"
)
points(scores$G1, scores$G3, pch="+")

添加图例:legend() 函数

example(legend)

添加文字:text() 函数

plot(d2, main="", xlab="")
lines(d1)
text(6, 0.10, "G1")
text(7, 0.03, "G2")

定制图形

改变字符大小:cex 选项

plot(d2, main="", xlab="")
lines(d1)
text(6, 0.10, "G1", cex=1.5)
text(7, 0.03, "G2")

改变坐标轴的范围:xlimylim 选项

d1
Call:
	density.default(x = scores$G1, from = 0, to = 20)

Data: scores$G1 (395 obs.);	Bandwidth 'bw' = 0.9036

       x            y            
 Min.   : 0   Min.   :4.650e-06  
 1st Qu.: 5   1st Qu.:8.764e-03  
 Median :10   Median :5.102e-02  
 Mean   :10   Mean   :4.989e-02  
 3rd Qu.:15   3rd Qu.:8.868e-02  
 Max.   :20   Max.   :1.076e-01  
d2
Call:
	density.default(x = scores$G2, from = 0, to = 20)

Data: scores$G2 (395 obs.);	Bandwidth 'bw' = 0.8126

       x            y            
 Min.   : 0   Min.   :0.0005023  
 1st Qu.: 5   1st Qu.:0.0140315  
 Median :10   Median :0.0405683  
 Mean   :10   Mean   :0.0490951  
 3rd Qu.:15   3rd Qu.:0.0865223  
 Max.   :20   Max.   :0.1146588  
plot(
  c(0, 20),
  c(0, 0.12),
  type="n",
  xlab="score",
  ylab="density"
)
lines(d1)
lines(d2)

添加多边形:polygon() 函数

f <- function(x) return (1 - exp(-x))
curve(f, 0, 2)
polygon(
  c(1.2, 1.4, 1.4, 1.2),
  c(0, 0, f(1.3), f(1.3)),
  col="gray"
)

density 参数可以配置以条纹形式绘图

f <- function(x) return (1 - exp(-x))
curve(f, 0, 2)
polygon(
  c(1.2, 1.4, 1.4, 1.2),
  c(0, 0, f(1.3), f(1.3)),
  col="gray",
  density=10
)

平滑散点:lowess()loess() 函数

plot(scores$G1, scores$G2)
lines(lowess(scores$G1, scores$G2))

绘制具显式表达式的函数

$$ g(t) = \sqrt {t^2 + 1} $$

g <- function(t) return ((t^2 + 1)^0.5)
x <- seq(0, 5, length=10000)
y <- g(x)
plot(x, y, type="l")

curve() 函数

curve((x^2+1)^0.5, 0, 5)

plot.function() 函数

f <- function(x) return ((x^2 + 1)^0.5)
plot(f, 0, 5)

将图形保存到文件

pdf("p1.pdf")
pdf("p2.pdf")
dev.list()
pdf pdf 
  2   3 
dev.set(2)
pdf 
  2 
dev.off()
pdf 
  3 
dev.set(3)
pdf 
  3 
dev.off()
null device 
          1 

创建三维图形

library(lattice)
a <- 1:10
b <- 1:15
eg <- expand.grid(x=a, y=b)
eg$z <- eg$x^2 + eg$x * eg$y
wireframe(z ~ x + y, eg)

参考

学习 R 语言系列文章

快速入门

向量

矩阵和数组

列表

数据框

因子和表

编程结构

数学运算与模拟

面向对象编程

输入与输出

字符串操作

本文代码请访问如下项目:

https://github.com/perillaroc/the-art-of-r-programming