#图形初阶 

 #例1(画图) 

 attach(mtcars)#绑定数据框mtcars 

 plot(wt,mpg) 

 abline(lm(mpg~wt))#添加最优拟合曲线 

 title("Regression of MPG on weight") 

 detach(mtcars)#对数据框删除绑定 


 #例2(保存图) 

 setwd("D:/桌面/R语言学习") 

 png("mygraph.png") 

 attach(mtcars)#绑定数据框mtcars 

 plot(wt,mpg) 

 abline(lm(mpg~wt))#添加最优拟合曲线 

 title("Regression of MPG on weight") 

 detach(mtcars)#对数据框删除绑定 

 dev.off() 


 #例3(打开新的图形窗口) 

 dev.new() 

 attach(mtcars)#绑定数据框mtcars 

 plot(wt,mpg,col="red") 
detach(mtcars)#对数据框删除绑定

 dev.new() 

 attach(mtcars)#绑定数据框mtcars 

 plot(wt,mpg,col="blue") 

 abline(lm(mpg~wt))#添加最优拟合曲线 

detach(mtcars)#对数据框删除绑定

 dev.new() 

 attach(mtcars)#绑定数据框mtcars 

 plot(wt,mpg,col="green") 

 abline(lm(mpg~wt))#添加最优拟合曲线 

 title("Regression of MPG on weight") 

 detach(mtcars)#对数据框删除绑定 


 #例4 

 dose<-c(20,30,40,45,60) 

 drugA<-c(16,20,27,40,60) 

 drugB<-c(15,18,25,31,40) 

 plot(dose,drugA,type="b")#b表示同时画点和线 



 par(optinname=value,...)#设置当前图形参数,除非再次修改,否则将在会话结束前一直有效 

 pch#指定绘制点使用的符号 

 lty#指定线条类型 

 lwd#指定线条宽度 

 fg#图形的前景色 

 bg#图形的背景色 



 col#绘图颜色 

 col.axis#坐标轴刻度文字的颜色 

 col.lab#坐标轴标签的颜色 

 col.main#标题颜色 

 col.sub#副标题颜色 

 #文本大小 

 cex#指定绘制点符号的大小 

 cex.axis#坐标轴刻度文字的缩放倍数 

 cex.lab# 

 cex.main# 

 cex.sub# 

 #字体 

 font#指定绘图使用的字体样式 

 font.axis# 

 font.lab# 

 font.main# 

 font.sub# 


 #例5 

 opar<-par(no.readonly=T)#复制当前的图形参数设置 

 par(lty=2,pch=17) 

 plot(dose,drugB,type="b") 

 par(opar) 


 #例6 

 n<-10 

 mycolors<-rainbow(n) 

 pie(rep(1,n),labels=mycolors,col=mycolors) 

 mygrays<-gray(0:n/n) 

 pie(rep(1,n),lables=mygrays,col=mygrays) 



 title(main="",sub="",xlab="",ylab="")#为图形添加标题和坐标轴标签 

 axis(side,at=,labels=,pos=,...)#创建自定义的坐标轴 

 side #在图形的哪边绘制坐标轴(1下,2左,3上,4右) 

 at #需要绘制刻度线的位置 

 labels #置于刻度线旁边的文字标签  

 pos #坐标轴线绘制位置的坐标 

 las #标签是否平行于(0)或垂直于(2)坐标轴 

 tck #刻度线的长度,以相对于绘图区域大小的分数表示 

 #例7 

 x<-c(1:10) 

 y<-x 

 z<-10/x 

 opar<-par(no.readonly=T) 

 par(mar=c(5,4,4,8)+0.1)#增加边界大小 

 plot(x,y,type="b",pch=21,yaxt="n",ann=FALSE)#ann=FALSE是移除默认的标题和标签 

 lines(x,z,type="b",pch=22,col="red") 

 axis(2,at=x,labels=x,col.axis="blue",las=2)#绘制坐标轴 

 axis(4,at=z,labels=round(z,digits=2),col.axis="green",cex.axis=0.7,las=2,tck=-0.01) 

 mtext("y=1/x",side=4,line=3,,cex.lab=1,las=2)#添加标题和文本 

 title("An Example of Creative Axes",xlab="X",ylab="Y=X") 

 par(opar) 



 abline(h=yvalues,v=xvalues) #为图形添加参考线 

 legend(location,title,legend,...) #添加图例 

 location #图例的位置,可以执行locator(1),单击鼠标给出位置 

 text() #向绘图区域内部添加文本 

 mtext() #向图形的四个边界之一添加文本 


 #例8(图形组合) 

 attach(mtcars) 

 opar<-par(mfrow=c(3,1))#图1 

 hist(wt) 

 hist(mpg) 

 hist(disp) 

 par(opar) 



 layout(matrix(c(1,1,2,3),2,2,byrow=T))#图2 

 hist(wt) 

 hist(mpg) 

 hist(disp) 

 detach(mtcars) 



 通过令fig=c(x1,x2,y1,y2)来完成图形布局的精细控制 

 #例9(图形布局) 

 opar<-par(no.readonly=T) 

 par(fig=c(0,0.8,0,0.8)) 

 plot(mtcars$wt,mtcars$mpg) 

 par(fig=c(0,0.8,0.38,1),new=T) 

 boxplot(mtcars$wt,horizontal=T,axes=F) 

 par(fig=c(0.5,1,0,0.8),new=T) 

 boxplot(mtcars$mpg,axes=F) 

 mtext("Enhanced Scatterplot",side=3,outer=T,line=-3) 

 par(opar) 



 #基本图形 

 #例1(条形图) 

 library(grid) 

 library(vcd)#数据框Arthritis在包中 

 counts<-table(Arthritis$Improved) 

 counts 

 barplot(counts,xlab="Improvement",ylab="Frequency",horiz=T)#图1 


 #因为Arthritis$Improved是一个因子,故可直接使用plot,不需要用table 

 plot(Arthritis$Improved,horiz=T)#图2 


 #例2(堆砌条形图和分组条形图) 

 library(grid) 

 library(vcd)#数据框Arthritis在包中 

 counts<-table(Arthritis$Improved,Arthritis$Treatment) 

 counts 

 barplot(counts,xlab="Treatment",ylab="Frequency",col=c("red","blue","green"),legend=rownames(counts))#堆砌条形图 



 barplot(counts,xlab="Treatment",ylab="Frequency",col=c("red","blue","green"),legend=rownames(counts),beside=T)#分组条形图 


 #例3(均值条形图) 

 states<-data.frame(state.region,state.x77) 

 means<-aggregate(states$Illiteracy,by=list(state.region),FUN=mean) 

 means 

 means<-means[order(means$x,decreasing=F),] #从小到大排序 

 means 

 barplot(means$x,names.arg=means$Group.1) 

 title("Mean Illiteracy Rate") 


 #例4(棘状图) 

 library(grid) 

 library(vcd) 

 attach(Arthritis) 

 counts<-table(Treatment,Improved) 

 spine(counts) 

 detach(Arthritis) 


 #例5(饼图) 

 par(mfrow=c(2,2)) 

 slices<-c(10,12,4,16,8) 

 lbls<-c("US","UK","Australia","Germany","France") 

 pie(slices,labels=lbls) 


 pct<-round(slices/sum(slices)*100) 

 lbls2<-paste(lbls," ",pct,"%",sep="") 

 pie(slices,labels=lbls2,col=rainbow(length(lbls2))) 


 library(plotrix) 

 pie3D(slices,labels=lbls,explode=0.1) 


 mytable<-table(state.region) 

 lbls3<-paste(names(mytable),"\n",mytable,sep="") 

 pie(mytable,labels=lbls3) 



 #例6(扇形图) 

 library(plotrix) 

 slices<-c(10,12,4,16,8) 

 lbls<-c("US","UK","Australia","Germany","France") 

 fan.plot(slices,labels=lbls) 


 #例7(直方图) 

 attach(mtcars) 

 par(mfrow=c(2,2)) 

 hist(mpg) 


 hist(mpg,breaks=12,col="red") 


 hist(mpg,freq=F,breaks=12,col="blue") 

 rug(jitter(mpg)) #轴须图 

 lines(density(mpg),col="green",lwd=2) 


 x<-mpg 

 h<-hist(x,breaks=12,col="red",) 

 xfit<-seq(min(x),max(x),length=40) 

 yfit<-dnorm(xfit,mean=mean(x),sd=sd(x)) 

 yfit<-yfit*diff(h$mids[1:2])*length(x) 

 lines(xfit,yfit,col="blue",lwd=2) 

 box() 

 detach(mtcars) 


 #例8(核密度图) 

 par(mfrow=c(2,1)) 

 d<-density(mtcars$mpg) 

 plot(d) 


 plot(d) 

 polygon(d,col="red",border="blue")#绘制多边形 

 rug(mtcars$mpg,col="brown") 


 sm.density.compare(x,factor) #向图形中叠加两组或更多的核密度图 

 #例9(可比较的核密度图) 

 par(lwd=2) 

 library(sm) 

 attach(mtcars) 

 cyl.f<-factor(cyl,levels=c(4,6,8),labels=c("4 cylinder","6 cylinder","8 cylinder")) 

 sm.density.compare(mpg,cyl,xlab="Miles Per Gallon") 

 title(main="MPG by Cylinders") 

 colfill<-c(2:(1+length(levels(cyl.f)))) 

 legend(locator(1),levels(cyl.f),fill=colfill) 

 detach(mtcars) 


 #例10(箱线图) 

 boxplot(mtcars$mpg)#图1 


 boxplot(mpg~cyl,data=mtcars)#图2 


 boxplot(mpg~cyl,data=mtcars,notch=T,varwidth=T,col="red")#图3 

 #notch=T #得到含凹槽的箱线图 

 #varwidth=T #使箱线图的宽度与其样本大小的平方根成正比 


 #例11(两个交叉因子的箱线图) 

 mtcars$cyl.f<-factor(mtcars$cyl,levels=c(4,6,8),labels=c("4","6","8")) 

 mtcars$am.f<-factor(mtcars$am,levels=c(0,1),labels=c("auto","standard")) 

 boxplot(mpg~am.f*cyl.f,data=mtcars,varwidth=T,col=c("gold","darkgreen")) 


 #例12(小提琴图) 

 library(vioplot) 

 x1<-mtcars$mpg[mtcars$cyl==4] 

 x2<-mtcars$mpg[mtcars$cyl==6] 

 x3<-mtcars$mpg[mtcars$cyl==8] 

 vioplot(x1,x2,x3,names=c("4","6","8"),col="gold") 


 #例13(点图) 

 dotchart(mtcars$mpg,labels=rownames(mtcars),cex=0.7) 


 #例14(分组、排序、着色后的点图) 

 x<-mtcars[order(mtcars$mpg),] 

 x$cyl<-factor(x$cyl) 

 x$color[x$cyl==4]<-"red" 

 x$color[x$cyl==6]<-"blue" 

 x$color[x$cyl==8]<-"darkgreen" 

 dotchart(x$mpg,labels=rownames(x),cex=0.7,groups=x$cyl,gcolor="black",color=x$color,pch=19) 


 #中级绘图 

 lowess() #平滑曲线拟合(基于局部加权多项式回归) 

 #例1 

 attach(mtcars) 

 plot(wt,mpg,pch=19) 

 abline(lm(mpg~wt),col="red",lty=1) 

 lines(lowess(wt,mpg),col="blue",lty=2) 

 detach(mtcars) 


 #例2 

 library(car) 

 scatterplot(mpg~wt|cyl,data=mtcars,legend.plot=T,id.method="identify",labels=row.names(mtcars),boxplots="xy") 

 #id.method="identify" #通过鼠标单击来交互式的识别数据点 

 #labels=row.names(mtcars) #通过点的行名来识别点 

 #legend.plot=T #表示在左上边界添加图例 


 #例3(散点图矩阵) 

 pairs(~mpg+disp+drat+wt,data=mtcars,upper.panel=NULL) 

 #upper.panel=NULL #只生成下三角的图形 


 #例4(散点图矩阵car包) 

 library(car) 

 scatterplotMatrix(~mpg+disp+drat+wt|cyl,data=mtcars,spread=F,diagonal="histogram") 

 #spread=F #表示不添加展示分散度和对称信息的直线 


 #例5(散点图矩阵gclus包) 

 library(gclus) 

 mydata<-mtcars[c(1,3,5,6)] 

 mydata.corr<-abs(cor(mydata)) 

 mycolors<-dmat.color(mydata.corr) 

 myorder<-order.single(mydata.corr) 

 cpairs(mydata,myorder,panel.colors=mycolors,gap=0.5) 


 smoothScatter() #利用核密度估计生成用颜色密度来表示点分布的散点图 

 #例6(高密度散点图) 

 set.seed(123) 

 n<-1000 

 c1<-matrix(rnorm(n,0,0.5),ncol=2) 

 c2<-matrix(rnorm(n,3,2),ncol=2) 

 mydata<-rbind(c1,c2) 

 mydata<-as.data.frame(mydata) 

 names(mydata)<-c("x","y") 

 with(mydata,plot(x,y,pch=19)) 

 with(mydata,smoothScatter(x,y)) 



 #例7(三维散点图) 

 library(scatterplot3d) 

 attach(mtcars) 

 s3d<-scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=T,type="h") 

 fit<-lm(mpg~wt+disp) 

 s3d$plane3d(fit) 


 #旋转三维散点图 

 library(rgl) 

 plot3d(wt,disp,mpg,col="red",size=5) 


 #包含回归曲面(默认线性) 

 library(Rcmdr) 

 scatter3d(wt,disp,mpg) 

 detach(mtcars) 


 symbols(x,y,circle=sqrt(z/pi)) #用面积表示第三个变量 

 #例8(气泡图) 

 attach(mtcars) 

 r<-sqrt(disp/pi) 

 symbols(wt,mpg,r,inches=0.3,fg="white",bg="lightblue") 

 text(wt,mpg,rownames(mtcars),cex=0.6) 

 detach(mtcars) 



 #例9(五种橘树随时间生长的折线图) 

 Orange$Tree<-as.numeric(Orange$Tree) 

 ntrees<-max(Orange$Tree) 


 xrange<-range(Orange$age) 

 yrange<-range(Orange$circumference) 


 plot(xrange,yrange,type="n") 


 colors<-rainbow(ntrees) 

 linetype<-c(1:ntrees) 

 plotchar<-seq(18,18+ntrees,1) 


 for(i in 1:ntrees){ 

  tree<-subset(Orange,Tree==i) 

  lines(tree$age,tree$circumference,type="b",lwd=2,lty=linetype[i],col=colors[i],pch=plotchar[i]) 

 } 

 legend(xrange[1],yrange[2],1:ntrees,cex=0.8,col=colors,pch=plotchar,lty=linetype,title="Tree") 


 #例10(相关图) 

options(digits=2)
 cor(mtcars) 

library(corrgram)
corrgram(mtcars,order=T,lower.panel=panel.shade,upper.panel=panel.pie,text.panel=panel.txt)#图1
 #order=T #相关阵使用主成分分析法对变量重排序 

 #lower.panel=panel.shade,upper.panel=panel.pie #下三角和上三角使用的元素类型 

#text.panel=panel.txt #主对角线元素类型

corrgram(mtcars,order=T,lower.panel=panel.ellipse,upper.panel=panel.pts,text.panel=panel.txt,diag.panel=panel.minmax)#图2

 corrgram(mtcars,lower.panel=panel.shade,upper.panel=NULL,text.panel=panel.txt)#图3 


 #例11(马赛克图) 

 ftable(Titanic) 

 library(vcd) 

 mosaic(Titanic,shade=T,legend=T)