• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

R语言_第8章

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

高级格函数(Lattice Function)

多面板散点图

setwd("E:/R/R-beginer-guide/data/RBook")
 Env <- read.table(file="RIKZENV.txt",header=TRUE)
 Env$MyTime <- Env$Year+Env$dDay3/365 #生成一个代表时间天数的新变量
 library(lattice) #载入
 xyplot(SAL ~ MyTime | factor(Station),type="1",
    strip = function(bg,...)
    strip.default(bg='white',...),
    col.line=1,data=Env) #SAL为y,MyTime为x,factor(Station)为条件变量,作用是生成多面板


strip函数表示对每一个带使用白色背景,col.line=1,对图形使用黑色的线条
其中例如type="r"为回归线,smooth为LOESS拟合,g为增加一个参考网格,l则是将点用线连起来,a是将每个面板中每组均值用线连起来

当使用连续变量时,会被默认为每个值都为离散值,因此需要将其分割为区间,函数single和equal.count可以完成该任务

参数strip需要包含一个F或T来说明是否绘制这个带状,以下是不同的命令绘制图有所区别:

 xyplot(SAL ~ MyTime | factor(Station),data=Env)
   
  xyplot(SAL ~ MyTime | factor(Station),type="1",strip=TRUE,col.line = 1,data=Env)
    
  xyplot(SAL ~ MyTime | factor(Station),type="1",strip=FALSE,col.line = 1,data=Env)

多面板盒形图:bwplot

bwplot(SAL ~ factor(Month)|Area ,strip=strip.custom(bg='white'),
      cex=0.5,layout=c(2,5),data=Env,xlab="Month",ylab="Salinity",
      par.settings=list(
        box.rectangle = list(col=1),
        box.umbrella = list(col = 1),
        box.symbol = list(cex = 0.5,col =1)
      ))  #条件变量是Area,背景是白色,layout来设置面板的布局指定矩形网格的行数和列数,par.settings=list用来设置盒形框的颜色,线条(伞形物),开放式圆圈(代表中位数)的尺寸和颜色

多面板克里兰夫点图

dotplot(factor(Month)~SAL|Station,
    subset= Area=="OS",jitter.x=TRUE,
    col=1,data=Env,strip=strip.custom(bg='white'),
    cex=0.5,ylab="Month",xlab="Salinity") #factor(Month)为y,SAL为x,Station为条件变量,  subset= Area=="OS"的意思是选取数据子集为OS的进行统计,jitter.x=TRUE作用是当多个观察值在同一个月份具有相同值的时候对水平方向增加少许的随机变化

多面板直方图:histogram

histogram(~ SAL|Station,data=Env,
     subset=(Area == "OS"),layout=c(1,4),
     nint=30,xlab="Salinity",ylab="Frequencies",
     strip=FALSE,strip.left=TRUE)  #需统计的变量是SAL, subset确定数据子集,layout=c(1,4)设定图为一列四行的排列顺序,nint=30设定条形的数目是30,strip=FALSE,strip.left=TRUE将带状移到面板的侧边        

面板函数

xyplot(SAL~Month|Year,data=Env,
            type=c("p"),subset=(Station=="GROO"),
            xlim=c(0,12),ylim=c(0,30),pch=19,
            panel=function(...){
              panel.xyplot(...)
              panel.grid(...,h=-1,v=-1)
              panel.loess(...)
            }) 

参数panel的作用是联系具体的面板函数和绘图规则,如果交换panel.xyplot和panel.grid的顺序,先绘制的将是网格,面板函数panel.loess使得图中增加了一条光滑的线,线的光滑程度介于0-1之间,可通过属性span确定
type也可以完成以上操作,type的三个值"p",“g”,“smooth”,作用相当于xyplot函数执行了panel.xyplot,panel.grid,panel.smooth三个面板函数

dotplot(factor(Month)~SAL|Station,pch=16,
        subset=(Area=="OS"),data=Env,
        ylab="Month",xlab="Salinity",
        panel=function(x,y,...){
          Q<- quantile(x,c(0.25,0.5,0.75),na.rm=TRUE)
          R<- Q[3]-Q[1]
          L<- Q[2]-3*(Q[3]-Q[1])
          MyCex <- rep(0.4,length(y))
          MyCol<- rep(1,length(y))
          MyCex[x<L]<-1.5
          MyCol[x<L]<-2
          panel.dotplot(x,y,cex=MyCex,col=MyCol,...)
        })  # quantile用于计算分位数,R<- Q[3]-Q[1]表示第三分位数减第一分位数,L<- Q[2]-3*(Q[3]-Q[1])表示中位数减去第三分位数和第一分位数的三倍,若是小于该值则属于异常值,用其他颜色和大小绘图

巧妙之处:
MyCex <- rep(0.4,length(y))
MyCol<- rep(1,length(y))
MyCex[x<L]<-1.5
MyCol[x<L]<-2
panel.dotplot(x,y,cex=MyCex,col=MyCol,…)

setwd("E:/R/R-beginer-guide/data/RBook")
 Sparrows <- read.table(file="Sparrows.txt",header=TRUE) 
 xyplot(Wingcrd~Tarsus|Species*Sex,  
      xlab="Axis 1",ylab="Axis 2",data=Sparrows,
      xlim=c(-1.1,1.1),ylim=c(-1.1,1.1),
      panel=function(subscripts,...){
        zi <- Sparrows[subscripts,3:8]
        di <- princomp(zi,cor=TRUE)
        Load <- di$loadings[,1:2]
        Scor <- di$scores[,1:2]
        panel.abline(a=0,b=0,lty=0,col=1)
        panel.abline(h=0,v=0,lty=2,col=1)
        for(i in 1:6){
          llines(c(0,Load[i,1]),c(0,Load[i,2]),col=1,lwd=2)
          ltext(Load[i,1],Load[i,2],rownames(Load)[i],cex=0.7)
        }
        sc.max<-max(abs(Scor))
        Scor <- Scor/sc.max
        panel.points(Scor[,1],Scor[,2],pch=1,cex=0.5,col=1)
      })  #两个条件变量,Species*Sex,由于原本是字符型因此直接当因子处理,向量subscripts自动包含了面板函数中所选数据的行数即3:8,Load和Scor是提前前两个轴的权重和得分,abline是绘制通过原点的轴,Scor/sc.max将得分调整至-1到1之间,并用panel.points函数将其绘制成点

PCA的结果可以被缩放到使其数值信息(坐标)在图中的取值介于-1到1之间,princomp的作用是进行主成分分析

三维散点图、表面图和等高线图

library(lattice)
cloud(CHLFa~T*SAL|Station,data=Env,
         screen=list(z=105,x=-70)
         ylab="Sal.",xlab="T",zlab="Chl.a",
         ylim=c(26,33),subset=(Area=="OS"),
         scales=list(arrows=FALSE))  #screen指出坐标轴的旋转度数,arrows=FALSE表示移除用于指示坐标轴正方向的箭头,这样坐标轴就有刻度      

函数levelplot,countourplot和wireframe可以用来绘制表面图

改变面板顺序

Birds<-as.vector(as.matrix(Hawaii[,2:9]))  #as.vector只能将矩阵变向量,因此先将数据框变矩阵
Time<-rep(Hawaii$Year,8)
MyNames<-c("Stilt_Oahu",...."Moorhen_Kauai")
ID<-rep(MyNames,each=48)  #生成ID序列,每个名字重复48次
xyplot(Birds~Time|ID,ylab="Bird abundance",layout=c(3,3),type="l",col=1) 
ID2<-factor(ID,levels=c("Stilt_Oahu",...."Moorhen_Kauai")) #改变面板顺序,只需改变因子ID的levels顺序即可

改变坐标轴界限和刻度

xyplot(Birds~Time|ID,ylab="Bird abundance",
           layout=c(3,3),type="l",col=1,
           scales=list(x=list(relation="same"),
           y=list(relation="free"),
           tck=-1))  #x轴具有相同范围,y轴根据数据范围确定,tck改变刻度线方向

在一个面板中绘制多条线

xyplot(Birds~Time|ID,ylab="Bird abundance",
           layout=c(3,3),type="l",col=1,
           scales=list(x=list(relation="same"),
           y=list(relation="free"),
           groups=ID,lwd=c(1,2,3)) #groups函数可以使同一种鸟绘制于一个单独面板中

在循环中绘图

AllAreas<-levels(unique(Env$Area))  #确定Area的值
for(i in AllAreas){
Env.i<-Env[Env$Areas==i,]
win.graph()
dotplot(factor(Month)~SAL|Station,data=Env.i)
print(dotplot(factor(Month)~SAL|Station,data=Env.i)) 
} #循环Area的值,Env.i<-Env[Env$Areas==i,]表示不同地区的数据的值都根据该地区进行变化,要得到图像必须将print放在循环里面

更新图形

Myplot<-xyplot(SAL~MyTIme|Station,type="l",data=Env)#将图像存储到一个对象中
print(Myplot)
updata(MyPlot,layout=c(10,3)) #以一个新的排列方式来绘制图形

当我们使用updata命令来处理图形的时候,我们的原始图形是不会改变的

总结


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言︱机器学习模型评估方案(以随机森林算法为例)发布时间:2022-07-18
下一篇:
R语言:ggplot2安装包失败解决办法发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap