# 设置全局图形参数(后续绘图生效)
par(mfrow=c(2,2), # 设置多图布局:2行 x 2列(共4个子图)
mai=c(0.6,0.6,0.4,0.4), # 设置图形边距(上左上右)
cex=0.7, # 所有文本(轴标签、标题等)缩小到70%
cex.main=1, # 主标题保持默认大小(不缩放)
font.main=1) # 主标题字体样式:1=普通,2=粗体,3=斜体,4=粗斜体
plot(R,Python,
main="(a) 散点图")
plot(factor(性别),
xlab="性别",ylab="人数", #局部参数设置
main="(b) 条形图")
plot(R~factor(性别),
xlab="性别",
main="(c) 箱线图")
plot(factor(性别)~R,
ylab="性别",
main="(d) 脊形图")
第二章 R绘图基础
1 R语言基本绘图函数(graphics包)
1.1 【图2-1】高级绘图函数plot()的简单应用
解释什么是绘图全局参数设置和局部参数设置?
为什么
plot()
能根据不同的输入形式作出不同的图形?
1.2 【图2-2】高级绘图函数plot()的泛型函数应用
什么是R语言的泛型函数?
lm类对象输入plot()将会输出哪些图形?
par(mfrow=c(2,2),mai=c(0.6,0.6,0.2,0.1),cex=0.7)
<-lm(R~Python,data=data2_1)
modelplot(model) #plot为泛型函数,针对lm类输出四个诊断图
1.3 【图2-3】低级绘图函数——在已有的图上增加新的元素
高级绘图函数和低级绘图函数有什么区别?
代码中哪些函数是低级作图函数,分别有什么用?
## 模拟数据
par(mfrow=c(1,1),mai=c(0.7,0.7,0.4,0.4),cex=0.7)
set.seed(1)
<- rnorm(200)
x <- 1+2*x +rnorm(200)
y <-data.frame(x,y)
d
# 高级作图
|> plot(xlab="x=自变量",ylab="y=因变量") # 绘制散点图
d # 低级作图
grid(col="grey60") # 增加网格线
axis(side=4,col.ticks="blue",lty=1) # 增加坐标轴
polygon(d[chull(d),],lty=6,lwd=1,col="lightgreen") # 增加多边形并填充底色
points(d) # 重新绘制散点图
points(mean(x),mean(y),pch=19,cex=5,col=2) # 增加均值点
abline(v=mean(x),h=mean(y),lty=2,col="gray30") # 增加均值水平线和垂直线
abline(lm(y~x),lwd=2,col=2) # 增加回归直线
lines(lowess(y ~ x,f=1/6),col=4,lwd=2,lty=6) # 增加拟合曲线
segments(-0.8,0,-1.6,3.3,lty=6,col="blue") # 增加线段
arrows(0.45,-2.2,-0.8,-0.6,code=2,angle=25,length=0.06,col=2)
# 增加带箭头的线段
text(-2.2,3.5,labels=expression("拟合的曲线"),adj=c(-0.1,0.02),col=4)
# 增加注释文本
rect(0.4, -2, 1.6,-4,col="pink",border="grey60") # 增加矩形
mtext(expression(hat(y)==hat(beta)[0]+hat(beta)[1]*x),cex=0.9,side=1,line=-4.3,adj=0.72) # 增加注释表达式
legend("topleft",legend=c("拟合的直线","拟合的曲线"),lty=c(1,6),col=c(2,4),cex=0.8,fill=c("red","blue"),box.col="grey60",ncol=1,inset=0.02) # 增加图例
title("散点图及拟合直线和曲线\n并为图形增加新的元素",cex.main=0.8,font.main=4) # 增加标题并折行,使用斜体字
box(col=4,lwd=2) # 增加边框
2 图形参数与图形控制
2.1 【图2-4】修改图形参数——增强绘图的可读性
对绘图添加主标题有哪两种方式?
xlab
和ylab两个局部参数有什么用?
par(mfrow=c(2,2),mai=c(0.6,0.6,0.3,0.2),cex=0.7,cex.main=1,font.main=1)
barplot(table(data2_1$性别))
title("(a) 默认设置的条形图")
barplot(table(data2_1$性别),horiz=TRUE,density=40,col="red",
xlab="频数",ylab="性别",main="(b) 修改参数后的条形图")
boxplot(R~性别,data=data2_1)
title("(c) 默认设置的箱线图")
boxplot(R~性别,data=data2_1,col=c("lightgreen","skyblue"),
xlab="性别",ylab="R考试分数",varwidth=TRUE,
main="(d) 修改参数后的箱线图")
2.2 【图2-6】连线类型设置——type参数
par
函数设置了全局参数哪些?参数
type
在不同图形中设置不同,具体代表什么?
<-1:30
x<-sin(pi/10*x)
y par(mfrow=c(2,3),mai=c(0.5,0.5,0.2,0.1),
cex=0.7,cex.axis=0.6,cex.lab=0.7,mgp=c(2,1,0),cex.main=0.8)
plot(x,y,type="p",main="(a) type=“p”",font.main=2,col.main="red")
plot(x,y,type="b",pch=21,font.axis=3,font.lab=3,bg="lightgreen",
main="(b) type=“b”",font.main=3)
plot(x,y,type="o",las=3,pch=0,fg="blue",col.lab="blue",
main="(c) type=“o”",font.main=1)
plot(x,y,type="l",lty=2,col="blue",lwd=2,bty="l",main="(d) type=“l”")
plot(x,y,type="s",col="grey20",main="(e) type=“s”",font.main=4)
plot(x,y,type="h",col="red",lwd=2,col.axis="red",main="(f) type=“h”")
2.3 【图2-7】配色方案设置——col参数
如果填充对象比配色数量多会怎么样?
默认配色
col=1:8
将采用哪八种颜色,分别写出它们在R中的调用字符。
<-1:10 # 生成1到10的等差数列
x<-LETTERS[1:10] # 生成字母标签向量
apar(mfrow=c(1,2),mai=c(0.4,0.4,0.3,0.2),cex=0.8,cex.axis=0.7,
cex.lab=0.8,mgp=c(2,1,0),cex.main=0.9,font.main=1) # 图形参数设置
barplot(x,names=a,col=c("red","green"),main="(a) 循环使用2种颜色")
barplot(x,names=a,col=1:8,main="(b) 重复使用颜色1:8")
2.4 【图2-8】创建自己的调色板——RColorBrewer包
RColorBrewer包的三类调色板展示
library(RColorBrewer)
layout(matrix(c(1,1,2,3),nrow=2,ncol=2),widths=c(1,1)) # 页面布局
par(mai=c(0.1,0.35,0.2,0.1),cex=0.6,cex.main=1,font.main=1) # 图形参数设置
display.brewer.all(type='seq') # 展示连续型部分
title(main="(a) 单色连续型部分") # 添加标题
display.brewer.all(type="qual") # 展示离散型部分
title(main="(b) 多色离散型部分")
display.brewer.all(type="div") # 展示极端型部分
title(main="(c) 双色极端型部分")
brewer.pal
需要输入哪些参数?函数返回一个什么向量?
library(RColorBrewer)
par(mfrow=c(2,3),mai=c(0.3,0.3,0.3,0.1),cex=0.6,font.main=1)
<-brewer.pal(7,"Reds") # 7种颜色的红色连续型调色板
palette1<-brewer.pal(7,"Set1") # 7种颜色的离散型调色板
palette2<-brewer.pal(7,"RdBu") # 7种颜色的红蓝色极端值调色板
palette3<-rev(brewer.pal(7,"Greens")) # 调色板颜色反转
palette4<-brewer.pal(8,"Spectral")[-1] # 去掉第1种颜色,使用其余7种
palette5<-brewer.pal(6,"RdYlBu")[2:4] # 使用其中的2:4种颜色
palette6<-LETTERS[1:7]
a
barplot(1:7,names=a,col=palette1,main="(a) 单色连续型调色板")
barplot(1:7,names=a,col=palette2,main="(b) 多色离散型调色板")
barplot(1:7,names=a,col=palette3,main="(c) 双色极端值调色板")
barplot(1:7,names=a,col=palette4,main="(d) 调色板颜色反转")
barplot(1:7,names=a,col=palette5,main="(e) 去掉第1种颜色")
barplot(1:7,names=a,col=palette6,main="(f) 使用其中的2:4种颜色")
2.5 【图2-10】更多调色板函数——grDevices包
rainbow(8,start=0.4,end=0.5)
代表什么含义?
library(grDevices)
par(mfrow=c(2,4),mai=c(0.3,0.3,0.3,0.1),cex=0.7,
mgp=c(1,1,0),cex.axis=0.7,cex.main=1,font.main=1)
<-1:8
x<-LETTERS[1:8] # 生成字母标签向量
a
barplot(x,names=a,col=rainbow(8),main="col=rainbow()")
barplot(x,names=a,col=rainbow(8,start=0.4,end=0.5),
main="col=rainbow(start=0.4,end=0.5)")
barplot(x,names=a,col=heat.colors(8),main="col=heat.colors()")
barplot(x,names=a,col=terrain.colors(8),main="col=terrain.colors()")
barplot(x,names=a,col=topo.colors(8),main="col=topo.colors()")
barplot(x,names=a,col=cm.colors(8),main="col=cm.colors()")
barplot(x,names=a,col=gray.colors(8),main="col=gray.colors()")
barplot(x,names=a,col=colors(256),main="col=colors(256)")
2.6 【图2-11】设置条件颜色——ifelse 函数的应用
ifelse
函数有什么用?
<-c(84,95,82,55,91,86,71,89,78,65) # 10个学生的考试分数
x<-c("女","女","男","女","男","男","女","女","男","女") # 性别向量
sexpar(mfrow=c(2,2),mai=c(0.4,0.6,0.4,0.2),cex=0.7,font.main=1)
# 图(a)
<-ifelse(x>=90,"red","blue") # 分数>=90 为红色,否则为蓝色
colsbarplot(x,names=sex,col=cols,ylab="分数",
main="(a) 分数>=90为红色,否则为蓝色")
# 图(b)
<-ifelse(x<60,"green","red") # 分数<=60为绿色,否则为红色
colsbarplot(x,names=sex,col=cols,ylab="分数",
main="(b) 分数<60为绿色,否则为红色")
# 图(c)
<-ifelse(x>mean(x),"red","blue") # 分数>均值为红色,否则为蓝色
colsbarplot(x,names=sex,col=cols,ylab="分数",
main="(c) 分数>均值为红色,否则为蓝色")
# 图(d)
<-ifelse(sex=="男","red","blue") # 男性为红色,否则为蓝色
colsbarplot(x,names=sex,col=cols,ylab="分数",
main="(d) 男性为红色,否则为蓝色")
3 页面布局与图形组合
3.1 【图2-12】的绘制代码——par(mfrow=c(2,2):按行(列)填充各图
par
函数中页面布局参数mfcol
和mfrow
有什么区别?
par(mfrow=c(2,2),mai=c(0.4,0.4,0.3,0.1),cex=0.7,
mgp=c(2,1,0),cex.axis=0.8,cex.main=1.2,font.main=1)
set.seed(123) # 设置随机数种子
<-rnorm(100) # 生成100个标准正态分布随机数
x<-rexp(100) # 生成100个指数分布随机数
y<-data.frame(x,y) # 构建数据框
dfplot(df,col=sample(c("black","red","blue"),100,replace=TRUE),
main="(a) 散点图")
boxplot(df,col=2:3,main="(b) 箱线图")
hist(x,col="orange1",main="(c) 直方图")
barplot(runif(5,10,20),names=LETTERS[1:5],col=2:6,main="(d) 条形图")
par(mfcol=c(2,2),mai=c(0.4,0.4,0.3,0.1),cex=0.7,mgp=c(2,1,0),cex.axis=0.8,cex.main=1.2,font.main=1)
set.seed(123) # 设置随机数种子
<-rnorm(100) # 生成100个标准正态分布随机数
x<-rexp(100) # 生成100个指数分布随机数
y<-data.frame(x,y)
dfplot(df,col=sample(c("black","red","blue"),100,replace=TRUE),main="(a) 散点图")
boxplot(df,col=2:3,main="(b) 箱线图")
hist(x,col="orange1",main="(c) 直方图")
barplot(runif(5,10,20),names=LETTERS[1:5],col=2:6,main="(d) 条形图")
3.2 【图2-13】的绘制代码——图形布局:layout函数
layout
函数与par(mfrow)
在页面布局中有什么差别?
=100;set.seed(12);x<-rnorm(n);y<-rexp(n)
nlayout(matrix(c(1,1,2,3,4,4,5,5,6,7,7,8),3,4,byrow=TRUE),
widths=c(1:1),heights=c(1:1))
par(mai=c(0.3,0.3,0.3,0.1),cex.main=0.9,font.main=1)
barplot(runif(8,1,8),names=LETTERS[1:8],col=2:7,main="(a) 条形图")
pie(1:12,col=rainbow(6),labels="",border=NA,main="(b) 饼图")
qqnorm(y,col=1:7,pch=19,xlab="",ylab="",main="(c) Q-Q图")
plot(x,y,pch=21,bg=c(2,3,4),cex=1.2,xlab="",ylab="",main="(d) 散点图")
plot(rnorm(25),rnorm(25),cex=(y+2),col=2:4,lwd=2,
xlab="",ylab="",main="(e) 气泡图")
hist(rnorm(1000),col=3,xlab="",ylab="",main="(f) 直方图")
plot(density(y),col=4,lwd=1,xlab="",ylab="",main="(g) 核密度图")
polygon(density(y),col="gold",border="blue")
boxplot(x,col=2,main="(h) 箱线图")