R_第七章

BFCase的列是时间,行是各个国家

Cases <- rowSums(BFCases[,2:16])  #对每一行的2到16列进行累加
names(Cases) <- BFCases[,1]  #names 给Cases加上BFCase的第一列标签
Cases
2003  2004   2005  2006  2007  2008
  4    46     98    115   88    34

par函数

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

mfrow=c(2,2) 生成4个图,每一列上2个,每一行上2个
mar选项指定每个图形周围的空白大小,缺省则是c(5,4,4,2)+0.1

饼图:

    pie(Cases,main="Ordinary pie chart")  #普通饼图
    pie(Cases,col=gray(seq(0.4,1.0,length=6)),clockwise=TRUE,main="Gray colours") #clockwise=TRUE因此翻转方向类似于时钟方向,gray则是灰色
    pie(Cases,col=rainbow(6),clockwise=TRUE,main="Rainbow colours")  #rainbow则是彩虹色
    library(plotrix)
    pie3D(Cases,labels=names(Cases),explode=0.1,main="3D pie chart",labelcex=0.6) #3D饼图

在这里插入图片描述

计算死亡数量:

 BFDeaths <- read.table(file="BirdFluDeaths.txt",header=TRUE)
        Deaths <- rowSums(BFDeaths[,2:16])
        names(Deaths) <-    BFDeaths[,1]

条形图和带形图:

par(mfrow = c(2,2),mar = c(3,3,2,1))
    barplot(Cases,main="Bird Flu cases")   #条形图画出流感数量
    Counts <- cbind(Cases,Deaths)          #将流感数量和死亡数量合成一个矩阵
    barplot(Counts)                                  #画出该矩阵
    barplot(t(Counts),col = gray(c(0.5,1)))  #将矩阵转置后再绘图,t(Counts)
    barplot(t(Counts),beside = TRUE)      #beside=TRUE,即可画出两个并行的条形

在这里插入图片描述

显示均值和标准差的条形图

Benthic <- read.table(file="RIKZ2.txt",header = TRUE)
   Bent.M <- tapply(Benthic$Richness,INDEX=Benthic$Beach,FUN=mean)
   Bent.sd <- tapply(Benthic$Richness,INDEX=Benthic$Beach,FUN=sd)
   MSD <- cbind(Bent.M,Bent.sd)
   MSD

tapply
根据x的不同水平对y使用FUN的函数
tapply(y,x,FUN=mean)

   bp <- barplot(Bent.M,xlab="Beach",ylim=c(0,20),ylab="Richness",col=rainbow(9))
   arrows(bp,Bent.M,bp,Bent.M+Bent.sd,lwd=1.5,angle=90,length=0.1)
   box()

表示标准差的垂直线通过函数arrows被加到图形上
arrows函数在坐标为(x1,y)和(x2,y)的两点间画一个箭头,因为具有同一个x,因此会产生一个垂直箭头
y1的值是均值Bent.M,y2的值是均值加上标准差Bent.M+Bent

在这里插入图片描述

带形图

    Benth.le <- tapply(Benthic$Richness,INDEX=Benthic$Beach,FUN=length)
    Benth.se <- Bent.sd / sqrt(Benth.le)  #标准误
   stripchart(Benthic$Richness ~ Benthic$Beach,vert = TRUE,pch=1,method="jitter",
                  jit=0.05,xlab="Beach",ylab="Richness")
       points(1:9,Bent.M,pch=16,cex=1.5)   #均值用实心圆点表示
       arrows(1:9,Bent.M,1:9,Bent.M+Benth.se,lwd = 1.5,angle = 90,length = 0.1) #均值加上标准误
       arrows(1:9,Bent.M,1:9,Bent.M-Benth.se,lwd = 1.5,angle = 90,length = 0.1) #均值减去标准误

(结果见上图右边)

盒形图

Owls <- read.table("Owls.txt",header = TRUE)
boxplot(Owls$NegPerChick,main="Negotiation per chick") 

par(mfrow = c(2,2),mar = c(3,3,2,1))
    boxplot(NegPerChick ~ SexParent,data = Owls)  
    boxplot(NegPerChick ~ FoodTreatment,data = Owls)
    boxplot(NegPerChick ~ SexParent * FoodTreatment,data = Owls)
    boxplot(NegPerChick ~ SexParent * FoodTreatment,names = c("F/Dep","M/Dep","F/Sat","M/Sat"),data = Owls)   

在这里插入图片描述

    par(mar = c(2,2,3,3))  #设置空白边框
    boxplot(NegPerChick ~ Nest,data = Owls,axes = FALSE,ylim =c (-3,8.5))  #ylim指定垂直轴的上下限,下限为负数则可以允许我们将标签放在图形的下部
    axis(2,at = c(0,2,4,6,8))  #axis函数用于画一个轴,2作为第一个参数,at参数具体指定刻度记号在哪里
    text(x=1:27,y = -2,labels=levels(Owls$Nest),cex=0.75,srt = 65)  #text命令将所有标签放置在合适的坐标处,cex参数指定字体的大小并且str定义角度

在这里插入图片描述

Bentic.n<-tapply(Benthic$Richness,Benthic$Beach,FUN=length) #计算海滩的观测值数量
BP.info<-boxplot(Richness~Beach,data=Benthic,col="grey",xlab="Beach",ylab="Richness") #用boxplot函数计算并存储在一个列表里
BP.midp<-BP.info$stats[2,]+(BP.info$stats[4,]-BP.info$stats[2,])/2  #计算所有海滩的中点
text(1:9,BP.midp,Bentic.n,col="white",font=2)  #将bentic.n的值放在盒子里

在这里插入图片描述

克里兰夫点图

Deer <- read.table(file="Deer.txt",header =  TRUE,fill = TRUE)   
dotchart(Deer$LCT,xlab="Length (cm)",ylab=" Observation number")
Isna <- is.na(Deer$Sex)  #生成一个和Sex具有相同长度的向量,它的值是T或F
dotchart(Deer$LCT[!Isna],groups=factor(Deer$Sex[!Isna]),xlab="Length(cm)",
ylab="Observation number grouped by sex)  #groups选项允许数据根据变量分组,变量Sex有缺失值,[!Isna],!符号把它的值做过颠倒因此只有Sex的值不缺失的被绘制出

groups选项允许数据根据变量分组
符号!把它的值做过颠倒因此只有Sex的值不缺失的被绘制出

在这里插入图片描述

添加均值的克里兰夫点图

Benthic <- read.table(file="RIKZ2.txt",header = TRUE)
Benthic$fBeach <- factor(Benthic$Beach)  #groups选项后要跟因子变量
par(mfrow = c(1,2))
dotchart(Benthic$Richness,groups = Benthic$fBeach,xlab = "Richness",ylab="Beach") #根据beach变量进行分组绘图
Bent.M <- tapply(Benthic$Richness,Benthic$Beach,FUN=mean) #计算均值
dotchart(Benthic$Richness,groups = Benthic$fBeach,gdata=Bent.M,
            pch=19,xlab="Richness", ylab="Beach")  #gdata属性用来覆盖一个统计量,在点图上添加均值,均值设为黑色实心圆点
 legend("bottomright",c("values","mean"),pch=c(1,19),bg="white")

在这里插入图片描述

polt函数

plot(y = Benthic$Richness,x = Benthic$NAP,xlab="Mean high tide (m)",
        ylab="Species richness",main="Benthic data")
   M0 <- lm(Richness ~ NAP ,data = Benthic)  #lm表示使用线性回归建立模型,结果存储在MO列表内
   abline(M0) #abline函数添加拟合线

plot(y = Benthic$Richness,x = Benthic$NAP,  type="n",axes=FALSE ,
          xlab="Mean high tide (m)",ylab="Species richness")   #axes=FALSE 取消坐标轴,type="n" 生成没有点的图形,即生成一个空白的仅有标签的窗口开始
   points(y = Benthic$Richness,x = Benthic$NAP)  #在仅有标签的空白窗口用points函数添加点

注意在points函数前要先执行plot函数

plot(y = Benthic$Richness,x = Benthic$NAP,  type="n",axes=FALSE ,
          xlab="Mean high tide (m)",ylab="Species richness",
          xlim = c(-1.75,2),ylim = c(0,20))  #xlim,ylim 指定水平轴,垂直轴的范围
  points(y = Benthic$Richness,x = Benthic$NAP) 
  axis(2,at = c(0,10,20),tcl = 1)  #2表示画垂直轴,at表示在哪刻轴的刻度,tcl缺失值为0.5,表示插入长度
  axis(1,at = c(-1.75,0,2),labels=c("Sea","Water line","Dunes"))  #1表示画水平轴,labels则是表示在-1.75,0,2处添加特征字符

**points 在一个图形上添加新值
type 设置为p绘制点,l是线,o是链接并覆盖点的线,b是点和线,s和S是阶梯线,h是垂直线,n是没有点和线
text 使用x和y的坐标从而指定包含标签字符串的标签向量在图形的指定位置
pos 表示位置在指定坐标点下左上右(1,2,3,4)方
offset使标签偏移指定坐标的量与一个字符宽度成一定的比例

type=“n”,axes=F,xlab="",ylab="",那么就会什么都不显示,再用以下命令自定义绘图:

在这里插入图片描述

图例

Birds  <- read.table(file="loyn.txt",header =TRUE)
Birds$LOGAREA <- log10(Birds$AREA)  #进行对数变化
plot(x=Birds$LOGAREA,y=Birds$ABUND,xlab="Log transformed area",
      ylab="Bird adbundance")  #绘制出需要进行拟合的点
M0 <- lm(ABUND~LOGAREA+GRAZE,data=Birds)  #进行线性回归
summary(M0)  #将线性回归的结果输出
    
LAR <- seq(from=-1,to =3,by =1)  #序列函数,选择几个在观察数据范围内之间的任意值
ABUND1 <- 15.7+7.2*LAR  #通过简单微积分决定每个放牧水平的丰富度的值
ABUND2 <- 16.1+7.2*LAR
ABUND3 <- 15.5+7.2*LAR
ABUND4 <- 14.1+7.2*LAR
ABUND5 <- 3.8+7.2*LAR
    
lines(LAR,ABUND1,lty = 1,lwd=1,col=1)  #将计算结果拟合画出,用lines前需要用order先排序
lines(LAR,ABUND2,lty = 2,lwd=2,col=2)
lines(LAR,ABUND3,lty = 3,lwd=3,col=3)
lines(LAR,ABUND4,lty = 4,lwd=4,col=4)
lines(LAR,ABUND5,lty = 5,lwd=5,col=5)
    
legend.txt <- c("Graze 1","Graze 2","Graze 3","Graze 4","Graze 5")  #定义作为图例的文本
legend("topleft",legend=legend.txt,
        col=c(1,2,3,4,5),
        lty=c(1,2,3,4,5),
        lwd=c(1,2,3,4,5),
        bty="o",cex=0.8)  #"topleft"表示图例位置为左上角,col指定颜色,lty指定线的形状,lwd指定线的宽度,bty表示添加围绕图例的盒子,cex指定图例中文本的大小

在这里插入图片描述

函数identify用来识别和绘制图形上的点,它可以通过给定图形上x,y的坐标完成或简单地输入图形目标,同时可以使用该函数得到某个点的样本数,但只对plot函数生成的图像起作用

属性pointsize可以改变字体大小,font可以定义字型

Whales <- read.table(file="TeethNitrogen.txt",
                      header=TRUE)
  N.Moby <- Whales$X15N[Whales$Tooth=="Moby"] #Moby这头鲸的氮同位素比例
  Age.Moby <- Whales$Age[Whales$Tooth=="Moby"]  #Moby这头鲸的年龄
  plot(x=Age.Moby,y=N.Moby,xlab="Age",ylab=expression(paste(delta^{15},"N"))) #expression函数用于添加特殊符号,paste命令使得delta^{15},"N"相结合,并用expression函数插入

在这里插入图片描述

其他有用的函数

在这里插入图片描述
在这里插入图片描述
pairs函数可以绘制多组图

协同图

coplot(Richness ~ NAP | as.factor(Beach),pch=19,data=Benthic) #和plot函数反过来,第一个参数是y,第二是x,beach函数作为因子,进行分组

在这里插入图片描述

  coplot(Richness ~ NAP | grainsize,pch=19,data=Benthic)  #使用grainsize作为条件变量作协同图,该条件变量为连续条件变量
  panel.lm=function(x,y,...)  #自定义函数panel.lm,lm线性回归,该回归忽略缺失值na.action = na.omit,并储存在变量tmp中,用abline绘制线,points绘制点
    {
      tmp <- lm(y ~ x,na.action = na.omit)
      abline(tmp)
      points(x,y,...)
    }
    coplot(Richness ~ NAP |as.factor(Beach),
     pch=19,panel=panel.lm,data = Benthic) #panel函数在每个面板上显示函数的执行结果

在这里插入图片描述
NAP的关系随着粒径梯度改变,NAP和粒径之间存在交互作用,因此可能包含交互作用项

   pHEire <- read.table(file="SDI2003.txt",header = TRUE)      
   pHEire$LOGAlt <- log10(pHEire$Altitude) #对数变换
   pHEire$fForested <- factor(pHEire$Forested) #设为因子,计算时以fForested分组
   coplot(pH ~ SDI | LOGAlt * fForested,
              panel=panel.lm,data=pHEire,number=2)  #LOGAit区间的数目和位置可以通过参数number控制,若没有设定number则有过多的面板造成协同图过于稠密

在这里插入图片描述

pHEire$Temp2 <- cut(pHEire$Temperature,breaks=2)  #用cut函数将数据分为两部分,breaks=2,因此平均值以上是一种,平均值以下是一种
pHEire$Temp2.num <- as.numeric(pHEire$Temp2) #因为Temp2是因子,因此转换为数值型,Temp2.num是一个具有值为1和2的向量
coplot(pH ~ SDI | LOGAlt*fForested,
          panel=panel.lm,data = pHEire,
          number = 3,cex=1.5,pch=19,
          col = gray(pHEire$Temp2.num/3)) #gray(1/3)是深灰色,gray(2/3)是浅灰色

在这里插入图片描述

组合不同类型的图

MyLayOut <- matrix(c(2,0,1,3),nrow=2,ncol=2,byrow=TRUE) #设定矩阵,规定三幅图分别放在哪里,第二幅放第一行第一列,第一幅放第二行第一列,第三幅放第二行第二列
MyLayOut
nf <- layout(mat = MyLayOut,widths = c(3,1),
            heights = c(1,3),respect = TRUE)  #设定矩阵的列宽和行高,第一列宽为3,第二列宽为1,第一行高为1,第二行高为3
show(nf)  #验证是否符合设定

在这里插入图片描述

xrange <- c(min(Benthic$NAP),max(Benthic$NAP))  #规定x的范围
yrange <- c(min(Benthic$Richness),max(Benthic$Richness))  #规定y的范围
#First graph
            par(mar = c(4,4,2,2))  #避免图形周围空白过多,多试验mar调整空白
            plot(Benthic$NAP,Benthic$Richness ,
                      frame.plot = FALSE,xlim = xrange,ylim = yrange,ylab = "Richness") #画出散点图
#Second graph
            par(mar = c(0,3,1,1))
            boxplot(Benthic$NAP,horizontal=TRUE,axes = FALSE,
                         frame.plot = FALSE,ylim= xrange,space = 0)  #画出NAP盒形图
#Third graph
            par(mar=c(3,0,1,1))
            boxplot(Benthic$Richness,axes = FALSE,ylim = yrange,space = 0,horiz= TRUE) #画出Richness盒形图

在这里插入图片描述

总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值