可视化

高级绘图

plot()/hist()/barplot()

函数 参数
plot(x) 绘制x的值为纵坐标,序号为横坐标的图
plot(x,y)或plot(y~x) 绘制y为纵坐标,x为横坐标的图
plot(matrix) 绘制矩阵散点图,一般matrix为数据框的某些列
axes=T,如果设置axes为F,则不显示边框和轴
type=“p”,设置线型,注意要加双引号,其他选项为”l”,“b”,“o”,见 图形参数,这个参数决定了绘制的图是点图还是线图
xlim,ylim 設置坐标范围
xlab,ylab坐标轴的标签,必须是字符型
main= ,sub= ,设置主标题,副标题。字符型。
hist() 将数据取值范围平均分成n份,每个区间长度称为组距,以每个组为横坐标,纵坐标可以是落在改组的数据的频数或频率或频率/组距。如果是频率/组距称为频率分布直方图,也可以看成是一个变量的概率密度。 x:数值向量
main,xlab,xlim,ylim:注意只有xlab,没有ylab
col:条的颜色
border:设置每个栏的边框颜色
freq=T:默认频数,设置为F时显示密度 prob是freq的化名,不过prob为true时,绘制密度
breaks:分成多少份
barplot() 显示各个分类的频数 height:向量或矩阵,矩阵就是一列为一个数据,矩阵可以选择绘制分组图或堆叠图
naems.arg:每个条的标签
horiz: T:水平 F :垂直
beside:T:分组 F:堆叠
border:边框颜色,如果设置为true,将和阴影线颜色相同
col,xlab,ylab,main
# plot
par(mfrow=c(2,3))
plot(c(1,2,3,4))
plot(c(1,2,3,4),axes=F)
plot(c(1,2,3,4),type="o")
plot(c(1,2,3,4),type="l")
plot(c(1,2,3,4),c(5,6,7,8))
x=seq(-1,1,0.001)
plot(x,x^2,type="l")

plot(as.data.frame(matrix(1:16,c(4,4))))#必须是数据框

x=rnorm(100)
par(mfrow=c(1,2))
hist(x,breaks=10)
hist(x,freq=F,breaks=10)
lines(density(x),col="red")

par(mfrow=c(2,2))
math<-c(78,92,89, 61, 95)
english<-c(90, 89, 95,70, 98)
names<-c("小刚","小明","小花","小芳","小丽")
barplot(math,names.arg=names,main="成绩",ylim=c(0,100))
barplot(math,names.arg=names,border="green",main="成绩",ylim=c(0,100),col=c("red","orange","lightblue","yellow","lightgreen"))#为每一组设置一个颜色
barplot(matrix(c(math, english),2,5), border="green",names.arg=names,beside=F,main="成绩",xlab="姓名",ylab="成绩",legend=c("数学","英语"),ylim=c(0,200))#绘制堆叠图,并设置图例
barplot(matrix(c(math, english),2, 5), border="green",names.arg=names,beside=T,main="成绩",xlab="姓名",ylab="成绩",col=rainbow(10),ylim=c(0,100))#绘制分组图,每个条一种颜色。

饼图

饼图绘制向量中各数值占总和的百分比。

二维饼图

语法:

pie(x,labels,radius,col,clockwise=F)

x:数据的向量

labels:每一个部分的标签

radius:圆的半径,决定了圆的大小

col:圆每一个部分的颜色

clockwise:默认逆时针,设置为true则顺时针绘制。

三维饼图

需要导入plotrix包,使用其中的pie3D包。

pie3D(x,label,explode=0,main…)

explode设置了每一份之间的间隙.

x=c(1,2,3,4)
nm=c("one","two","three","four")
par(mfrow=c(3,2))
pie(x)#不设置标签默认为各个数值
lbl=paste(round(100*x/sum(x),2),"%")
pie(x,labels=lbl)
pie(x,labels=lbl,clockwise=T)#顺时针
pie(x,labels=lbl,col="blue")#注意要加双引号
pie(x,labels=lbl,col=rainbow(4))
pie(x,labels=lbl,col=rainbow(4))
legend("topright",nm,fill=rainbow(4))#这个颜色默认会跟pie中的对应上

# install.packages("plotrix")
library("plotrix")
par(mfrow=c(1,2))
pie3D(x,labels=lbl)#关键字不能丢
pie3D(x,labels=lbl,explode=0.1)#设置间隙

箱线图

boxplot(formula,data,notch=F,varwidth=F,names,na.action…)

formula:一般是y~x,或者x。如果是取自某个数据框,直接写列名。y是数据,x是分类依据,一般是因子。y会根据对应x的因子水平分类,有多少分类,就有多少个箱线图。

data:如果数据是取自数据框,则需要声明数据框。前面也可以直接写data的名称,就是对每一列做箱线图

notch:设置为T。可以画出缺口。

varwidth:设置为T,则每个箱子的宽度和对应分类的样本量成比例。

names:给每个箱子命名。

na.action:对缺失值的处理,默认忽视。

x=1:12
y=gl(3,2,12)
y1=gl(3,2,12,labels=c("A","B","C"))
z=rep(c(1,2,3),4)
par(mfrow=c(2,2))
boxplot(x)
boxplot(x~y)
boxplot(x~y1)
boxplot(x~z)#不是因子数据,也会根据其中的数值分类

df=as.data.frame(matrix(1:16,c(4,4),dimnames=list(c("a","b","c","d"),c("one","two","three","four"))))
par(mfrow=c(1,2))
boxplot(df,data=df)#可以直接对数据框每一列绘制箱线图
boxplot(t(df),data=df)#可以直接对数据框每一行绘制箱线图

pairs函数与panel参数

pairs函数可以绘制多个变量的散点图矩阵,数据对象为数据框,直接pairs(数据框)即可

但是当我们想设置里面图形的类型时,就得用到panel参数。

  • panel:定义每个矩阵元素图中的图形,默认为散点图
  • lower.panel:定义下三角矩阵元素图中的图形,默认散点图
  • upper.panel:定义上三角矩阵元素图中的图形,默认为散点图
  • diag.panel:定义对角线元素图形,默认不绘制

既可以设置为已有的图形,也可以设置为自定义的绘图函数。

df=as.data.frame(matrix(1:16,c(4,4),dimnames=list(c("a","b","c","d"),c("one","two","three","four"))))
pairs(df)

#panel参数还未解决

coplot函数

依照条件来分区间,每个区间画连个变量之间的关系图。

data(quakes)
coplot(lat~long|depth,data=quakes)

data(quakes)
coplot(lat~long|depth*mag,data=quakes,number=c(2,3),show.given=c(TRUE,FALSE))

qqnorm函数

判断数据是否是正态分布,就是qqnorm(x)跟qqline(x)对比,

判断两个样本是否相同分布,就是qqplot(x,y)

par(mfrow=c(1,2))
data(AirPassengers)
qqnorm(AirPassengers)
qqline(AirPassengers,col="red")
X=rexp(100)
y=rchisq(100,3)
qqplot(x,y)

image与persp(三维绘图函数)

image函数创建三维图像

data(volcano)
par(mfrow=c(1,2))
image(t(volcano)[ncol(volcano):1,])
x=10*(1:nrow(volcano))
y=10*(1:ncol(volcano))
image(x, y, volcano, col =terrain.colors(100))

persp函数创建三维图像

x<- seq(0,2,0.01)
y<- seq(0,1,0.01)
f<-function(x,y)
{
ifelse(x<=1,10*x*log10(x)*y*(y-1),-10*(x-1)*log10(abs(x-1))*y*(y-1))
}
z= outer(x,y,f)
persp(x,y,z,theta=30,phi=30,expand=0.5,col="lightblue")

par(mfrow=c(2,2))
persp(x,y,z,theta=30,phi=30,expand=0.5, col="lightblue")
persp(x,y,z,theta=150,phi=30,expand=0.5,col="lightblue")
persp(x,y,z,theta=30,phi=30,expand=0.9, col="lightblue")
persp(x,y,z,theta=30,phi=30, expand=0.5, col="red")

热图

使用heatmap绘制热图

#共列举了50位球员的19个指标
#包括打了几场球G)、上场几分钟(MIN)、得分PTS…·
nba <-read.csv("D:/R/data/ppg2008.csv", sep=",")
nba <-nba[order(nba$PTS),]#按每场得分从大到小排序
row.names(nba)<- nba$Name # 以球员名字命名nba<-nba[,2:20]
nba_matrix<- data.matrix(nba)
heatmap(nba_matrix, Rowv=NA, Colv=NA, col = heat.colors(256),scale="column", margins=c(5,10))
heatmap(nba_matrix, col = heat.colors(256),scale="column",margins=c(5,10))

低级绘图参数

函数 功能
points(x,y) ∶添加点
线
lines(x,y) ∶添加线
segments(x0,Y0,X1,y1) ∶从(x0,y0)到(x1,y1)画线段
arrows(x0,Y0,X1,y1) ∶从(x0,y0)到(x1,y1)画带箭头的线段
abline(a,b) ∶绘制斜率为b和截距为a的直
abline(h=y) ∶在纵坐标y处画水平直线
abline(v=x) ∶在横坐标x处画垂直线
abline(lm.obj) ∶画出lm.obj确定的回归线
图形
rect(x1,y1,x2,y2) ∶绘制长方形,左下角为x1,y1),右上角为(x2,y2)
polygon(x,y) 绘制多边形。x,y为向量,连接各点。
文字
legend(x,y,legend) ∶在点(x,y)处添加图例,说明内容由legend给
text(x,y,labels…) ∶在(x,y)处添加用labels指定的文字
x=seq(-2,2,0.01)
plot(x,x^2,type="l",col="orange")
points(1,1,col="red",pch=19,cex=1)#标记(1,1)点
lines(x,2*x-1,col="blue")#做(1,1)点的切线
text(1.5,1,expression(y==2%*%x-1))#添加公式文字
arrows(1,1,2,3,code=2)#右箭头
abline(3/2,-1/2,col="yellow")#做切线的垂直线
arrows(0,3/2,1,1,code=1)#左箭头
abline(h=2)
abline(v=-1)
arrows(-1,2,1,2,code=3)#双箭头
rect(0,4,1,3,border="red")
polygon(c(-2,-1.5,-1),c(0,1,0),col="green")
legend(1.5,4,c("幂函数","线性函数"),fill=c("orange","blue"))

图形参数

部分绘图参数可以放在函数里面做为选项,只改变该函数。

也可以用par函数永久的改变图形参数,也就是后面的所有图形都会被改变。

可使用?par来查看。

下面是一些常用的图形参数:

type

决定了点的形式

可以在函数中设置

图形参数”type”已过期不用了,所以只在函数中设置

显示
p 默认,点
l 将点连接成线,不显示点
b 连线,但是在有点的地方断开
o 连线,点在线上
s 下梯形
S 上梯形
h 做点到x轴的竖线,不显示点
n 说明都不显示
par(mfrow=c(3,3))
plot(c(1,2,3,4),type="p",main="p")
plot(c(1,2,3,4),type="l",main="l")
plot(c(1,2,3,4),type="b",main="b")
plot(c(1,2,3,4),type="o",main="o")
plot(c(1,2,3,4),type="s",main="s")
plot(c(1,2,3,4),type="S",main="S")
plot(c(1,2,3,4),type="h",main="h")
plot(c(1,2,3,4),type="n",main="n")

bg

设置整个画布背景颜色,不可在图形中设置。

一次设置对应所有画布,但是如果设置多次,只会生效与后面的画布,前面的依然生效与前面的设置。

par(bg="red")
par(mfrow=c(2,2))#这张被设置为红色背景
plot(c(1,2,3,4))
plot(c(1,2,3,4))
plot(c(5,6,9,3))
par(bg="blue")
plot(c(1,2,3,4))#依然属于前面的2*2的画布,所以是在red背景下

plot(c(1,2,3,4))#不再属于前面的画布,是一张新的,而在这张新的前有一个新的设置为蓝色,所以显示为蓝色。

bty

图形边框

显示
o 全边框
c 没有右边框
u 没有上边框
] 没有左边框
l 没有右、上边框
7 没有左、下边框
n 全部边框都没有,仅有坐标轴
par(bg="white")
par(mfrow=c(3,3))
plot(c(1,2,3,4),bty="o",main="o")
plot(c(1,2,3,4),bty="l",main="l")
plot(c(1,2,3,4),bty="7",main="7")
plot(c(1,2,3,4),bty="c",main="c")
plot(c(1,2,3,4),bty="u",main="u")
plot(c(1,2,3,4),bty="]",main="]")
plot(c(1,2,3,4),bty="n",main="n")

cex与pch与font

cex可以设置文字与字符的大小

pch只控制符号的类型,值不需加引号

font只控制字体的类型

par(mfrow=c(2,2))
plot(c(1,2,3,4),cex=1,pch="*",font=1,main="cex=1,pch=*,font=1")
plot(c(1,2,3,4),cex=2,pch=0,font=2,main="cex=2,pch=0,font=2")
plot(c(1,2,3,4),cex=3,pch=15,font=3,main="cex=3,pch=15,font=3")
plot(c(1,2,3,4),cex=4,pch=19,font=4,main="cex=4,pch=19,font=4")

可以看到坐标轴上的值被改变了字体,点被改变了样式和大小,但是标题和横纵坐标标签并未被改变样式

par(font=4,cex=2,pch="*")
plot(c(1,2,3,4),main="线性",xlab="横坐标")
text(3,2,"点")

标题和坐标轴标签不会被改变。

lty与lwd

线条样式与线条宽度

可以看到lty大于6时就是循环1到6

par(mfrow=c(3,4))
plot(c(1,2,3,4),lty=1,lwd=0.25,main="lty=1,lwd=0.25",type="l")
plot(c(1,2,3,4),lty=7,lwd=0.5,main="lty=7,lwd=0.5",type="l")
plot(c(1,2,3,4),lty=2,lwd=0.75,main="lty=2,lwd=0.75",type="l")
plot(c(1,2,3,4),lty=8,lwd=1,main="lty=8,lwd=1",type="l")
plot(c(1,2,3,4),lty=3,lwd=1.25,main="lty=3,lwd=1.25",type="l")
plot(c(1,2,3,4),lty=9,lwd=1.5,main="lty=9,lwd=1.5",type="l")
plot(c(1,2,3,4),lty=4,lwd=1.75,main="lty=4,lwd=1.75",type="l")
plot(c(1,2,3,4),lty=10,lwd=2,main="lty=10,lwd=2",type="l")
plot(c(1,2,3,4),lty=5,lwd=2.25,main="lty=5,lwd=2.25",type="l")
plot(c(1,2,3,4),lty=11,lwd=2.5,main="lty=11,lwd=2.5",type="l")
plot(c(1,2,3,4),lty=6,lwd=2.75,main="lty=6,lwd=2.75",type="l")
plot(c(1,2,3,4),lty=12,lwd=3,main="lty=12,lwd=3",type="l")

col

设置符号的颜色

par(col="red")
par(mfrow=c(2,2))
plot(c(1,2,3,4))
plot(c(1,2,3,4),type="l")
abline(h=2)
text(2,3,"点")
legend("topright",legend="图例")
boxplot(c(1,2,3,4))
barplot(c(1,2,3,4))

可以看到他会影响的颜色为所有的点,线,边框,以及text和legend的文字颜色。

mfcol和mfrow

网格作图

mar

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

par(mar=c(2,2,2,2))
plot(c(1,2,3,4))

par(mfrow=c(2,2))
plot(c(1,2,3,4))
plot(c(1,2,3,4))
plot(c(1,2,3,4))
plot(c(1,2,3,4))

par(mfrow=c(2,2))
par(mar=c(1,1,1,1))
plot(c(1,2,3,4))
par(mar=c(2,2,2,2))
plot(c(1,2,3,4))
par(mar=c(3,3,3,3))
plot(c(1,2,3,4))
par(mar=c(4,4,4,4))
plot(c(1,2,3,4))

数学公式与符号

图形有时需要添加数学公式或符号

数学公式需要用到expression函数来显示

有时需要打希腊字母等特殊字符

可以用help(plotmath)或example(plotmath)或demo(plotmath)

基础运算符

注意“=”号的表现形式

大型运算符

上下标

箭头符号

集合符号

特殊字体

导数符号

希腊字母

网格作图

mfrow与mfcol图形参数

mfrow就是把绘图窗口分割为几行几列的部分,先按行开始排列。

而mfcol是先按列开始排列

使用layout函数

layout函数使用矩阵来模拟绘图窗口的分割,矩阵的维度代表了绘图窗口的分割,矩阵中的元素的值代表了第几个图形,矩阵中元素的位置代表了图的位置。具有相同值的元素的位置会被合并。如果元素值为0,则代表该位置不绘制图形。

同时还可以为矩阵的每一个维设置宽度和高度的比例。比如一个2*2的矩阵,可以设置宽度之比为width=c(1,4),高度之比为height=c(4,1)。

可以使用layout.show(n)来查看当前页面的分割情况。

par(mar=c(1,1,1,1))
layout(matrix(c(1,0,2,3),nrow=2),widths=c(1,4),heights=c(3,1))#构建复合图形
x=rnorm(100)
y=rchisq(100,df=10)
boxplot(y,col="blue")#变量y的垂直箱线图
plot(x,y,col="green")#x与y的散点图
boxplot(x,horizontal=T,col="red")#变量x的水平箱线图

split.screen函数

可以用split.screen函数来将绘图窗口分成几个部分。然后使用screen()声明所属的屏幕再绘图。使用close.screen()来关闭。

par(mar=c(1,1,1,1))
split.screen(c(2,1))
## [1] 1 2
screen(2)
plot(c(1,2,3,4))
screen(1)
barplot(c(1,2,3,4))

close.screen(all=T)
par(mar=c(1,1,1,1))
split.screen(c(3,3))
## [1] 1 2 3 4 5 6 7 8 9
screen(5)
plot(c(1,2,3,4))
screen(4)
barplot(c(5,6,7,8))

plot(c(11,12,13,14))

plot(c(5,6,7,8))
close.screen(n=4)
## [1] 1 2 3 5 6 7 8 9
plot(c(11,21,31,41))

close.screen(all=T)
上一页