分享

R学习笔记,持续更新

regan 2016-9-22 18:05:07 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 9981
本帖最后由 regan 于 2016-9-27 19:24 编辑





云笔记连接:http://note.youdao.com/noteshare ... f426195ce904f3d6ad8



1。R中查看demo例子:demo()/demo(graphics)
2。R中的有用帮助:

3。R中用于管理工作空间的函数

4。R中的输入和输出
输入:source("filename")
输出:1)文本输出:sink("filename")/sink("filename",append=TRUE)
          2)图形输出:使用dev.off()将输出返回到终端

5。包的使用:使用help(package="car")查看包的简短描述及包中的函数名称和数据集名称的列表
6。批处理:Linux中批处理R CMD BATCH optioins infile outfile。infile是R文件所在路径,outfile是输出数据文件路径,options配置控制执行细节的选项
7。结果重用:
lm(mpg~wt,data=mtcars) 用数据集mtcar生成线性方程mpg=a+kwt
lmfit<-lm(mpg~wt,data=mtcars)  
plot(lmfit) 预测的模型图形化展示  
cook<-cooks.distance(lmfit) 计算影响度量统计量
plot(cook) 图像化展示
predict(lmfit,mynewdata)用模型lmfit预测mynewdata

创建数据集

1。R中的数据结构

R中的因子(factor)是名义型变量或有序型变量,类似于Java中的Enum
2。选取数据框中的元素
dataFrame$name
with(dataFrame,{name})
3。变量可以分为名义变量、有序型变量连和续型变量。名义变量和有序类别变量在R中称为因子(factor):status<-factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))
4。数据的输入
     1)使用键盘输入数据:mydata<-data.frame(age=numeric(0)) mydata<-edit(mydata)或mydata<-fix(mydata)
     2)read.table()从带分隔符的文本文件导入数据:grades<-read.table("studentgrades.csv",header=TRUE,seq=",",row.names="STUDENTID",stringsAsFactors=FALSE) stringsAsFactors=FALSE将禁止字符型变量转换成因子
     3)导入Excel数据:先安装RODBC,install.packages("RODBC")  library(RODBC) channel<-odbcConnectExcel("myfile.xls") mydataframe<-sqlFetch(channel,"mysheet") odbcClose(channel)
     4)导入XML格式数据
     5)从网页抓取数据:参考www.programmingr.com   Webscraping using readLines and RCurl
     6)导入SPSS数据:install.packages("Hmisc") libarary(Hmisc) mydataframe<-spss.get("mydata.sav",use.value.labels=TRUE)
     7 )导入SAS数据:先导出csv文件,载从csv文件导入R
     8)导入Stata数据:library(foreign) mydataframe<-read.dta("mydata.dta")
     9 )导入netCDF数据:library(ncdf) nc<-nc_open("mynetCDFfile") myarray<-get.var.ncdf(nc,myvar)
     10)导入HDF5数据:
     11)访问数据库管理系统:library(RODBC) myconn<-odbcConnect("mydsn",uid="xxx",pwd="xx") crimedat<-sqlFetch(myconn,Crime) pundat<-sqlQuery(myconn,"select * from student") close(myconn)

    12)处理数据对象的实用函数:





图形初阶

1)产生图像:attach(mtcars) plot(wt,mpg) abline(lm(mpg~wt)) title("Reression of MPG on Weight") detach(mtcars)
2)保存图像:只需要将图像夹在图形设备和dev.off之间即可
pdf("mygraph.pdf")  attach(mtcars) plot(wt,mpg) abline(lm(mpg~wt)) title("Reression of MPG on Weight") detach(mtcars)  dev.off
还可以使用win.metafile() /png()/jpeg()/bmp()/tiff()/xfig()/postscript()等将图形保存weight其它格式
3)避免图形覆盖可以使用dev.new()方法打开新的窗口4
4)使用plot绘制图:
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") 使用help(plot)查看更多帮助
5)使用par()指定图形参数,配置一些选项并且这些选项在该会话周期内一直有效
第一种做法:opar<-par(no.readonly=TRUE)
par(lty=2,pch=17)
plot(dose,drugA,type="b")
par(opar)
第二种做法:plot(dose,drugA,type="b",lty=2,pch=17)
6)符号与线条:


7)颜色:
n<-10
mycolors<-rainbow(n)
pie(rep(1,n),labels=mycolors,col=mycolors)
mygrays<-gray(0:n/n)
pie(rep(1,n),labels=mygrays,col=mygrays)

8)文本属性:

dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
opar<-par(no.readonly=TRUE)
par(pin=c(2,3))
par(lwd=2,cex=1.5)
par(cex.axis=0.75,font.axis=3)
plot(dose,drugA,type="b",pch=19,lty=2,col="red")
plot(dose,drugA,type="b",pch=23,lty=6,col="blue",bg="green")
par(opar)
9)添加文本、自定义坐标轴和图例
title()函数为图形天假标题和坐标标签:title(main="mail title" sub="sub title" xlab="x-axis lable",ylab="y-axis lable")
axis()函数定义自定义的坐标轴,格式为:axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)

x<-c(1:10)#生成数据
y<-x
z<-10/x
opar<-par(no.readonly=TRUE)
par(mar=c(5,4,4,8)+0.1) #增加边界大小
plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE)#绘制x对y的图像
lines(x,z,type="b",pch=22,col="blue",lty=2)#添加直线
axis(2,at=x,labels=x,col.axis="red",las=2)#绘制自定义坐标轴
axis(4,at=z,labels=round(z,digits=2),col.axis="blue",las=2,cex.axis=0.7,tck=-0.01)
mtext("y=1/x",side=4,line=3,cex.lab=1,las=2,col="blue")#添加标题和文字
title("An Example of Creative Axes",xlab="X values",ylab="Y=X")
par(opar)
10)次要刻度线
首先加入包library(Hmisc)   然后minor.tick(nx=n,ny=n,tick.ratio=n)
11 )参考线
abline():abline(h=c(1,5,7)):在1、5、7位置添加水平实现
abline(v=seq(1,10,2),lty=2,col="blue"):在1、3/5、7/9添加蓝色虚线
12)图例:legend(location,title,legend,...)

dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
opar<-par(no.readonly=TRUE)
par<-par(lwd=2,cex=1.5,font.lab=2)#增加线条、文本、符号、标签的宽度和大小
plot(dose,drugA,type="b",pch=15,lty=1,col="red",ylim=c(0,60),main="Drug A vs Drug B",xlab="Drug Dosage",ylab="Drug Response")#绘制图像
lines(dose,drugB,type="b",pch=17,lty=2,col="blue")
abline(h=c(30),lwd=1.5,lty=2,col="gray")
library(Hmisc)#增加次要刻度线
minor.tick(nx=3,ny=3,tick.ratio=0.5)
legend("topleft",inset=0.05,title="Drug Type",c("A","B"),lty=c(1,2),pch=c(15,17),col=c("red","blue"))
par(opar)
运行如下:

13)文本标注:
text():text(location,"text to place ",pos,...)
mtext():mtext("text to place",side,line=n,...)

attach(mtcars)
plot(wt,mpg,main="Mileage vs. Car Weight",xlab="Weight",ylab="Mileage",pch=18,col="blue")
text(wt,mpg,row.names(mtcars),cex=0.6,pos=4,col="red")
detach(mtcars)

14)图形的组合:par()和layout组合使用。
mfrow:安航填充
nfcol按列填充
例:
attach(mtcars)
opar<-par(no.readonly=TRUE)
par(mfrow=c(2,3))
plot(wt,mpg,main="Scatterplot of wt vs. mpg")
plot(wt,disp,main="Scatterplot of wt vs disp")
hist(wt,main="Histogram of wt")
boxplot(wt,main="Boxplot of wt")
par(opar)
detach(mtcars)

通过layout精确设置图形位置和显示的大小
attach(mtcars)
layout(matrix(c(1,2,1,3),2,2,byrow=T),widths=c(3,1),heights=c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

15)图形布局的精细控制
opar<-par(no.readonly=TRUE)
par(fig=c(0,0.8,0,0.8),new=T)#设置散点图
plot(mtcars$wt,mtcars$mpg,xlab="Miles Per Gallon",ylab="Car Weight")
par(fig=c(0,0.8,0.55,1),new =TRUE)#在上方添加箱线图
boxplot(mtcars$wt,horizontal=T,axes=FALSE)
par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mtcars$mpg,axes=FALSE)
mtext("Enhanced Scatterplot",side=3,outer=T,line=-3)
par(opar)



基本数据管理

1)na.omit()移除所有含有缺失值的观测
2)日期值:as.Date(dateTime,format)

也可以使用format(Sys.Date(),"%Y-%m-%d")格式化日期

基本数据管理

1)创建新变量:变量名<-表达式。表达式部分可以包含多种运算符和函数

2)将新变量整合到数据框中的三种方法:
A:
mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
mydata$sum<-mydata$x1+mydata$x2
mydata$mean<-(mydata$x1+mydata$x2)/2
B:
attach(mydata)
mydata#sum<-x1+x2
mydata$mean<-(x1+x2)/2
detach(mydata)
C:
mydata<-transform(mydata,sum=x1+x2,mean=(x1+x2)/2)
3)R中的逻辑运算符

从新编码数据并加到数据框中
leadership<-within(leadership,
(agecat <- NA
agecat[age>75] <- "Elder"
agecat[age >= 55 & age  <= 75]) <- "Middle Aged",
agecat[age < 55] <- "Young")
常见的重新编码函数:recode/doBy/recodevar/cut等
4)变量重命名:names(leadership)[6:10]<-c("item1","item2","item3","item4","item5")
5)缺失值:is.na()
重新编码缺失值:leadership$age[leadership$age==99]<-NA#强age为99的置为NA
6)移除缺失值:很多函数中都有na.rm选项,如sum(x,na.rm=TRUE)
亦可以通过na.omit移除所有含有缺失值的记录,如na.omit(leadership)
7)类型判断和类型转换:

8)数据的排序:order()函数,排序变量前面加一个减号表示得到降序的结果
newdata<-leadership[order(leadership$age),]
newdata<-leadership[order(gender,-age),]
9)数据集的合并
添加列:merge()函数用于合并两个数据框,通过一个或多个共有变量进行联结,相当于sql的inner join。例如:total<-merge(dataframeA,dataframeB,by="ID");total<-merge(dataframeA,dataframeB,by=c(""ID,"Country"))
注意*:如果直接横向合并两个数据框,并且不指定公共索引,直接使用cbind()函数:例如,tatal<-cbind(A,B)
添加行:使用rbind()函数添加行,例如:tatal<-rbind(dataframeA,dataframeB)。横向联结通常用于向数据框中添加观测。
10)数据集取子集
    which函数返回为真的下表
    subset函数:例如,newdata<-subset(leadership,age>35|age<24,select=c(q1,q2,q3,q4))
                                   newdata<-subset(leadership,gender=='M'&age>25,select=gender:q4)
11)随机抽样:使用sample()函数完成随机抽样
mysample<-leadership[sample(1:nrow(leadership),3,replace=F)]
该语句表示从1到leadership所有行中无放回抽三个样本,replace为F表示无放回,T为放回
更丰富的方法可以查阅sampling包和survery包

12)使用SQL语句操作数据框
先安装sqldf包:install.packages("sqldf"),例如:
library(sqldf)
newdf<-sqldf("select * from mtcars where carb=1 order by mpg",row.names=TRUE)
newdf

sqldf("select avg(mpg) as avg_mpg,avg(disp) as avg_disp,gear from mtcars where cyl in(4,5) group by gear")

高级数据管理


1)数学函数

2)统计函数

3)数据标准化:使用scale()对矩阵或数据框进行标准化,默认标准化为均值为0,标准差为1的标准化。如newdata<-scale(mydata);若要对每一列进行任意均值和标准差的标准化,使用如下代码:newdata<-scala(mydata)*SD+M,M是想要的均值,SD是想要的标准差。newdata<-transform(mydata,myvar=scale(myvar)*10+50),才代码将myvar标准化为均值为50,标准差为10
4)概率函数,概率函数形如[dpqr]distribution_abberviation
d=密度函数,density
p=分布函数,distribution function
q=分位数函数,quantile function
r=生成随机数,随机偏差
distribution_abbreviation()指分布名称的缩写
5)常用的概率函数:

6)正态分布函数

7)设定随机数种子
set.seed()显示指定随机数种子,让结果重现。runif()用来生成0到1区间的服从均匀分布的伪随机数
8)生成多元正太数据
MASS包中的mvrnorm函数,调用格式为:mvrnorm(n,mean,sigma),n是想要的样本大小,mean伪均值向量,sigma是方差-协方差矩阵
libarary(MASS)
options(digis=3)#设置数字格式
set.seed(1234)#设置随机数种子
mean<-c(230.7,146,7,3.6)
sigma<-matrix(c(15360.8,6721.2,-47.1,6721.2,4700.9,-16.5,-47.1,-16.5,0.3),nrow=3,ncol=3)
mydata<-mvrnorm(500,mean,sigma)
mydata<-as.data.frame(mydata)
names(mydaata)<-c("y","x1","x2")
dim(mydata)#mydata的维度
9)字符处理函数:

10)其他实用函数

11)将函数运用到矩阵和数据框
R中提供了一个apply函数,可以将任意函数应用到矩阵、数组、数据框的任何维度上。apply函数使用格式为apply(x,MARGIIN,FUN,...);x为数据对象,MARGIN是维度的下标,FUN是指定的函数,而...表示传递给FUN函数的任意的参数。MARGIN=1表示行,MARGIN=2表示列。
mydata<-matrix(rnorm(30),mrow=6)
apply(mydata,1,mean)#计算每行均值
apply(mydata,2,mean)#计算每一列的均值
apply(mydata,2,mean,trim=0.2)#计算每一列的截尾均值。
可以使用lapply或sapply将函数应用到列表上。
12)数据处理的一套解决方案
options(digits=3)
student<-c("John Davis","Angela Williams","Bullwinkle Moose","David Jones","Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Greg Knox","Joel England","Mary Rayburn")
math<-c(502,600,412,358,495,512,410,625,573,522)
science<-c(95,99,80,82,75,85,80,95,89,86)
english<-c(25,22,18,15,20,28,15,30,27,18)
roster<-data.frame(student,math,science,english,stringsAsFactors=FALSE)#构建数据框
z<-scale(roster[,2:4])#使用scale函数对math/science/english进行均值为0,标准差为1的标准化
score<-apply(z,1,mean)#计算标准化之后的得分均值
roster<-cbind(roster,score)#将均值绑定到roster数据框
y<-quantile(score,c(0.8,0.6,0.4,0.2))#求分位数
roster$grade[score>=y[1]] <-"A"#由分数和分位数判断属于哪一个等级
roster$grade[score<y[1] & score>=y[2]] <-"B"
roster$grade[score<y[2] & score>=y[3]] <-"C"
roster$grade[score<y[3] & score>=y[4]] <-"D"
roster$grade[score<y[4]] <-"E"
name<-strsplit((roster$student)," ")#将student按空格划分
lastname<-sapply(name,"[",2)#使[函数,提取name对象的第二部分
firstname<-sapply(name,"[",1)#使用[函数,提取name对象的第一部分
roster<-cbind(firstname,lastname,roster[,-1])#将firstname和lastname绑定到数据框
roster<-roster[order(lastname,firstname),]#使用order函数对roster数据框排序
roster
12)控制流
  重复和循环
      for:for(var in seq) statment 例如:for(i in 1:10) print("hello")
      while:while(cond) statment 例如:i<-10 while(i>0) {print("hello");i<-i-1}
  条件执行
      if-else结构:if(cond) statment
                          if(cond) statment else statment2
      示例:if(is.character(grade)) grade<-as.factor(grade)
                if(!is.factor(grade)) grade <-as.factor(grade) else print("Grade already is a factor")
      ifelse结构:iselse(cond,statment1,statment2)
      cond为TRUE执行第一个语句,为FALSE执行第二个语句
      示例:ifelse(score>0.5,print("Passed"),print("Failed"))
  switch结构:switch(expr,...)
      feelings<-c("sad","afraid")
      for(i in feelings)
            print(switch(i,
            happy="I am glad you are happy",
            afraid="There is nothing to fear",
            sad="Cheer up",
            angry="Calm down now"
      ))
13)自定义函数
    myfunction<-function(arg1,arg2,...){
       statements
       return(object)
    }
   例:
mydate <- function(type="long"){
    switch(type,
    long=format(Sys.time(),"%A %B %d %Y"),
    short=format(Sys.time(),"%y-%m-%d"),
    cat(type,"is not a recognized type\n")
    )
}
mydate("long")
注意*:使用cat函数捕获不能匹配的记录;使用warning生成一条错误信息;用message生成诊断信息;使用stop函数停止执行并提示错误信息
14)整合与重构
    转置:使用t()函数完成矩阵或数据框的转置。
    cars<-mtcars[1:5,1:4]
    t(cars)
    整合:aggregate(x,by,FUN),x是待折叠对象,by是一个变量名组成的列表,这些变量将被去掉形成新的观测,FUN用于新的观测值中进行计算
    options(digits=3)
    attach(mtcars)
    aggdata<-aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=T)
    aggdata
   按cyl和gear分组,并对分组后的子集使用FUN函数
15)数据整合的强大包:reshape包,是一套重构和整合数据的万能工具
install.packages("reshape")
两个过程:
1.融合melt  :
library(reshape)
md<-melt(mydata,id=(c("id","time")))

2.重铸cast:newdata<-cast(md,formula,FUN);md为融合的数据,formula描述最后的结果,FUN数据整合函数

基础方法:基本图形

1)安装类风湿性关节炎结果集,vcd包中有数据集Arthritis
install.packages("vcd")

2)条形图:通过垂直或水平的条形展示了类别型变量的分布(频数),barplot(height);height是一个向量或一个矩阵

3)简单的条形图
library(vcd)
counts<-table(Arthritis$Improved)
counts
barplot(counts,main="Simple bar Plot",xlab="Improvement",ylab="Frequncy")#垂直条形图
barplot(counts,main="Horizontal bar plot",xlab="Frequency",ylab="Imporvement",horiz=TRUE)#水平条形图
注意*:若要绘制的类别型变量是一个因子或有序因子,可以直接使用plot函数快速创建一幅条形图。因此
plot(counts,main="Simple bar Plot",xlab="Improvement",ylab="Frequncy")#垂直条形图
plot(counts,main="Horizontal bar plot",xlab="Frequency",ylab="Imporvement",horiz=TRUE)#水平条形图

4)堆砌条形图和分组条形图:如果barplot
barplot中传入的参数如果是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。deside=FALSE(默认值),为堆砌条形图,否则为分组条形图
library(vcd)
counts<-table(Arthritis$Improved,Arthritis$Treatment)
counts
barplot(counts,main="Stacked Bar Plot" , xlab="Treatment" , ylab="Frequency" , col=c("red","yellow","green"),legend=rownames(counts))#堆砌条形图
barplot(counts,main="Grouped Bar Plot " , xlab="Treatment" , ylab="Frequency" , col=c("red","yellow","blue"),legend=rownames(counts),beside=TRUE)#分组条形图

5)均值条形图,使用整合函数将结果传递给barplot函数,来创建表示均值、中位数、标准差等的条形图。
例:
states<-data.frame(state.region,state.x77)
means<-aggregate(states$Illiteracy,by=list(state.region),FUN=mean)#按state.region整合后求均值
means
barplot(means$x,names.arg=means$Group.1)#使用names.arg指定标签名
6)条形图的微调
par(mar=c(5,8,4,2))#修改图形边界大小
par(las=2)#旋转条形标签。修改标签文本
counts<-table(Arthritis$Improved)
barplot(counts,main="Treatment Outcome",horiz=T,cex.names=0.8,names.arg=c("No Improvment","Some Improvment","Marked Improvement"))#cex.names=0.8缩小了字体大小,par()函数能够对R的默认图形做出大量的修改
7)棘状图:它对堆砌条形图进行了重新缩放,条形的高度均为1
library(vcd)
attach(Arthritis)
counts<-table(Treatment,Improved)
spine(counts,main="Spinogram Example")
detach(Arthritis)
8)饼图:pie(x,labels),x是一个非负值向量,表示扇形面积,labels表示扇形标签字符型向量
例:
par(mfrow=c(2,2))
slices<-c(10,12,4,16,8)
lbls<-c("US","UK","Australia","Germany","France")ins
pie(slices,labels=lbls,main="Simple Pie Chart")
pct<-round(slices/sum(slices)*100)#为饼图添加比例值
lbls2<-paste(lbls,"",pct,"%",sep="")
pie(slices,labels=lbls2,col=rainbow(length(lbls2)),main="Pie Chart with Percentages")#rainbow定义颜色个数
packages.install("plotrix")
library(plotrix)
pie3D(slices,labels=lbls,explode=0.1,main="3D Pie Chart")#3D饼图
mytable<-table(state.region)
lbls3<-paste(names(mytable),"\n",mytable,sep="")
pie(mytable,labels=lbls3,main="Pie Chart from a Table \n (with sample sizes)")
9)扇形图
library(plotrix)
slices<-c(10,12,4,16,8)
lbls<-c("US","UK","Australia","Germany","France")
fan.plot(slices,labels=lbls,main="Fan Plot")

10)直方图:通过在X轴上将值域划分为一定数量的组,在Y轴上显示相应的频数,hist(x),x是一个由数值组成的向量,freq=FALSE表示根据概率密度而不是频数绘制图形。breaks用于控制组的数量
例:
par(mfrow=c(2,2))
hist(mtcars$mpg)
hist(mtcars$mpg,breaks=12,col="red",xlab="Miles Per Gallon",main="Coloerd Histograme with 12 bins")#X轴划分为12份,红色填充
hist(mtcars$mpg,freq=F,col="red",xlab="Miles Per Gallon",main="Histograme ,rug plot ,density curve")
rug(jitter(mtcars$mpg))#增加轴须图
rug(jitter(mtcars$mpag,amount=0.01))#在每一个数据值中间增加一个很小的随机值(正负amount),避免重复
lines(density(mtcars$mpg),col="blue",lwd=2)#为图三增加密度曲线,lwd指线宽度
x<-mtcars$mpg
h<-hist(x,breaks=12,col="red",xlab="Miles Per Gallon" ,main="Histograme with normal curve and box")
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()#将图像合起来的盒图


11)核密度图 :核密度用于估计随机变量概率密度函数的一种非参数方法,使用用于观察连续型变量。plot(density(x)),x是一个数值型向量,plot会绘制一幅新的图,可以使用lines()函数,将核密度图叠加到一幅已经存在的图上
par(mfrow=c(2,1))
d<-density(mtcars$mpg)
plot(d)
d<-density(mtcars$mpg)
plot(d,main="Kernel Density of Miles Per Gallon")
polygon(d,col="red",border="blue")#将曲线修改为蓝色,实心红色填充曲线下方区域。polygn函数是根据顶点的x和y坐标绘制的多边形,本例由density函数提供
rug(mtcars$mpg,col="brown")#添加棕色的轴须

核密度图可以用于比较组间差距,sm包中的sm.density.compare()函数可以向图像叠加两组或更多的核密度图,使用方式为sm.density.compare(x,factor),其中x是一个数值向量,factor是一个分组变量install.packages("sm")
library(sm)
par(lwd=2)
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 Distribution by car Cylinders")#添加主题
colfill<-c(2:(1+length(levels(cyl.f))))
legend(locator(1),levels(cyl.f),fill=colfill)#legend添加图例,locator(1)获取鼠标点击位置
detach(mtcars)

12)箱线图:又称为盒须图,绘制连续型变量的五数总括【最大值,下四分位数,中位数,上四分位,最小值】。箱线图能够显示可能的离群点(正负1。5*IQR外的值,IQR表示四分位距,即上四分位与下四分位的差值),例:boxplot(mtcars$mpg,main="box plot",ybal="Miles per Gallon")

13)使用并列箱线图进行跨组比较
箱线图可以展示单个变量或分组变量,格式为boxplot(formula,data=dataframe),formula是一个公式,dataframe代表提供数据的数据框。公式格式为y ~ A ,这将为类别型变量A的每个值并列的升恒数值型变量y的箱线图;公式y ~ A*B将类型变量A和B的所有水平量量组合生成数值型变量y的箱线图。
varwidth=TRUE使箱线图的宽度与样本大小的平方成正比,horizontal=TRUE可以转向坐标轴的方向。
boxplot(mpg ~ cyl,data=mtcars,main="Car Mileage Data",xlab="Number of Cylinders",ylab="Miles Per Gallon")

添加notch=TRUE,可以得到凹槽的箱线图,若两个箱的凹槽互不重叠,表明他们的中位数有显著差异
boxplot(mpg ~ cyl,data=mtcars,notch=TRUE,varwidth=TRUE,col="red",main="Car Mileeage Date",xlab="Number of Cylinders",ylab="Miles Per Gallon")#varwidth是箱线图的宽度与样本大小成正比

为多个分组因子绘制箱线图
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=TRUE,col=c("gold","darkgreen"),main="MPG Distribution by Auto Type",xlab="Auto Type")

14)小提琴图:是一种箱型图的变种,它是箱型图与核密度图的结合,使用vioplot函数绘制
install.packages("vioplot"),使用格式为vioplot(x1,x2,...,names=,col=);x1,x2,。。。表示要绘制的一个或多个数值向量,每个向量绘制一幅小提琴图,names指定小提琴图中的标签,col指定颜色
例:
install.packages("vioplot")
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("4cyl","6cyl","8cyl"),col="gold")
title("Violin Plots of Miles Per Gallon")

15)点图:点图提供了在水平刻度上绘制大量有标签值的方法,可以使用dotchart()韩顺绘制,格式为:dothcart(x,labels=);x是一个数值向量,labels是每个点的标签组成的向量,使用groups来选定因子,用以指定x中元素的分组方式,gcolor可以控制不同分组的颜色,cex控制标签的大小。
例:
dotchart(mtcars$mpg,labels=row.names(mtcars),cex=0.7,main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")

分组、排序、着色后的点图
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,cex=0.7,groups=x$cyl,gcolor="black",color=x$color,pch=19,main="Gas Mileage for Car Models\n grouped by cylinder",xlab="Miles Per Gallon")






已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条