前言

R语言绘图虽然看着简洁,但是函数参数实在是太多了——虽然学了4天,但是像是学了一周,其实我目前目的是画好看的图,那么如果有绘图模板就好了。由于买的书中的函数调用太多简洁,df$SOD等变量数据不知从何而来,所以要自己积累模板了。

这里存在一些问题,虽然学了知识就算忘了也有印象,但是忘的太多又要重学!比如几个月或是几年才捡起来,用几次的matlab,每次都要重敲一两天的语法代码和绘图代码,才能找到感觉……


         \;\\\;\\\;

apply

m <- array(
  c(1:10),
  dim=c(2,5)
  # byrow=TRUE #按行填充 array没有这个参数
)
m
a=apply(m,1,sum)   #按行求和
a
a=apply(m,2,sum)   #按列求和
a
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> a
[1] 25 30
> a
[1]  3  7 11 15 19
a <- array(
  c(1:8),
  dim=c(2,2,2)
)
a
res=apply(a,1,sum)    #第1层2x2,第2层2x2
res
res=apply(a,2,sum)    #第1片2x2,第2片2x2
res
res=apply(a,c(1,2),sum)   #6根1x2
res
> a
, , 1

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8
> res
[1] 16 20
> res
[1] 14 22
> res
     [,1] [,2]
[1,]    6   10
[2,]    8   12

         \;\\\;\\\;

tapply 分组计算

v <- c(1:5)
v
group <- c(rep('a',3),rep('b',2))
group

#a b
#6 9
tapply(v,group,sum)  #按group分组,将对应的v中的元素加起来



mat <- matrix(c(1:10),nrow=2)
mat
group <- matrix(c(rep(1,5),rep(2,5)),nrow=2)
group

# 1  2
#15 40
# tapply(mat,group,sum)  #按group分组,将对应的mat中的元素加起来

#1 2
#3 8
tapply(mat,group,mean) #按group分组,将对应的mat中的元素加一起求均值

         \;\\\;\\\;

lapply 多元素按行分组计算

需要转成data.frame

l <- list(
  a=c(1:5),
  b=c(6:10)
)
#返回一个list
res <- lapply(l,mean )   # 3 8
#转成data.frame
res <- as.data.frame(res)
res
> res
  a b
1 3 8
rownames <- paste('a',LETTERS,sep='#')
rownames

#去掉前缀a#
names <- unlist(lapply(
  strsplit(rownames,'#'),
  function(x) x[2]   #取第二个元素
))
names
> rownames
 [1] "a#A" "a#B" "a#C" "a#D" "a#E" "a#F" "a#G" "a#H" "a#I"
[10] "a#J" "a#K" "a#L" "a#M" "a#N" "a#O" "a#P" "a#Q" "a#R"
[19] "a#S" "a#T" "a#U" "a#V" "a#W" "a#X" "a#Y" "a#Z"
> names
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

         \;\\\;\\\;

sapply 简化版lapply

l <- list(
  a=c(1:5),
  b=c(6:10)
)
sapply(l,mean,simplify=T) #T表示不用unlist了
a b 
3 8 

         \;\\\;\\\;

mapply 多data计算

#可以传入多个data
mapply(
  sum,
  list(a=1,b=2,c=3),
  list(a=10,b=20,d=30)
)

mapply(
  sum,
  list(a=1,b=2,c=3),
  list(a=10,b=20,c=30),
  list(a=15,b=25,d=35)
)

mapply(
  function(x,y) x%%y,
  c(1:50),
  c(1:10)
)

         \;\\\;\\\;

par

bty 图的围边

par(mfrow=c(3,2))
bty <- c('o','l','7','c',']','u')    #bty是图的围边
for(i in 1:6){
  par(bty=bty[i])
  plot(1:5,main=paste('bty=',bty[i],sep=':'))
}

在这里插入图片描述

         \;\\\;\\\;

fg/bg 前景/背景

前景就是图的围边

par(
  fg='red',          #前景(边框)
  bg='white'         #背景
)
par(mfrow=c(1,1),
    font=3,          #1普通,2粗体,3斜体,4粗斜体
    family='serif')  #字体serif就是Times New Roman


#气泡图
plot(1:5,
     main="Times New Roman",
     cex=1:5,        #cex是点的大小
     col=1:5         #col是颜色
)

在这里插入图片描述

         \;\\\;\\\;

las 坐标轴横竖数字

#las表示坐标轴数字的横竖
par(mfrow=c(2,2))
for( i in 0:3){
  par(las=i)
  plot(1:5,main=paste('las=',i))
}

在这里插入图片描述

         \;\\\;\\\;

lty 线的类型

par(mfrow=c(2,3))
for( i in 1:6){
  par(lty=i,lwd=i/2)   #lwd默认是1,线段粗细
  plot(1:5,type='l',main=paste('lty=',i),sub='subtitle')
}

在这里插入图片描述

         \;\\\;\\\;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐