R语言基础绘图教学

2017-03-24    编辑:诺禾致源

R语言是用于统计分析、绘图的语言和操作环境。R的统计分析能力突出,有强大的数据展示能力。而其本质作为编程语言,具有着强大的拓展和开发能力,可以编制自己的函数,或制作独立的统计分析包、快速实现新算法。
R软件可以从其官网(https://www.r-project.org/)下载安装。R提供了超过4000个包,这些包可以实现很多不同的功能,而R自带了一系列的默认包,利用这些默认包,就可以画出一些基础的图形。下面就介绍一些基础图形的绘制方法,当然,也可能会涉及到一些加载不出来的扩展包,这说明这不是R自带的,需要先获取并安装install.packages(“包名称”),再下载不是R自带的其他扩展包。

基础概念

1)数据结构:

标量(数值型、字符型或逻辑型),向量(储存同类型数据组成的一维数组),矩阵(储存同类型数据组成的二维数组),数组(存同类型数据组成的多维数组)以及数据框(储存各种类型的数据)等。

作图类型

1)条形图

条形图可以展示类别型变量的分布情况,使用的函数为barplot(height),其中height为一个向量或一个矩阵。下面介绍一下基本条形图的绘制方法:
#载入vcd包
> library("vcd")
#将数据框Arthritis的Improved列提出,制成表格
> counts <- table(Arthritis$Improved)
#绘制条形图,定义了横纵坐标轴名,标题,以及颜色
barplot(counts,main="Simple Bar Plot",xlab="Improvement",ylab="Frequency",col=c("lightseagreen", "lightcoral","mediumpurple"))
如图1所示。

图1 条形图

当然,也可以绘制一些变化的条形图,比如:堆砌条形图或分组条形图等:
#将数据框Arthritis的Improved列和Treatment列提出,制成表格
> counts <-table(Arthritis$Improved,Arthritis$Treatment)
#绘制堆砌条形图和分组条形图
> barplot(counts,main="堆砌条形图",xlab="Treatment",ylab="Frequency",col=c("lightseagreen", "lightcoral","mediumpurple"), legend= rownames(counts), ylim=c(0,52) )
> barplot(counts,main="分组条形图",xlab="Treatment",ylab="Frequency",col=c("lightseagreen", "lightcoral", "mediumpurple"),legend=rownames(counts), beside=TRUE)
如图2与图3所示。

2)变量类型:

名义型(没有顺序之分的类别变量,也叫类别型,如type1,type2)、有序型(有顺序的变量,但非数量关系,如poor,improved,excellent)以及连续型(某个范围内的任意值,如10,11.5,15,20)。

图2 堆砌条形图

图3 分组条形图

2)饼图

饼图是由扇形面积来表示组分所占比例,用pie函数实现。下面介绍一下在一幅图中同时绘制三张饼图的方法:
#定义一个2*2的图框
> par(mfrow=c(2,2))
#定义数据
> slices <- c(10,12,4,16,8)
> lbls <- c("US","UK","Australia","Germany","France")
#画标准饼图
>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")
#载入plotrix包
>library(plotrix)
#绘制扇形图
>fan.plot(slices, labels=lbls, main="Fan Plot")

如图4所示。

图4 饼图

3)频率直方图

直方图通过x轴上将值域分割为一定数量的组,在y轴上显示相应值的频数,可以展示连续型变量的分布。
#将mtcar数据集中的mpg列挑出来
> x <- mtcars$mpg
#绘制直方图,定义x分组数,颜色以及坐标轴名称
> h<-hist(x,breaks=12,col="red",xlab="MilesPer Gallon",main="Histogram 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()

如图5所示。

图5 频率直方图

4)箱线图

箱线图通过绘制连续型变量的五数总括(最小值、下四分位数、中位数、上四分位数、最大值),描述了连续型变量的分布。同时,在一副图中并列放置多组样品的箱线图,可以直观的进行跨组比较。代码如下:
#用mtcars数据集里的mpg列作为y坐标,用cyl列作为分组方式进行箱图绘制
> boxplot(mpg~cyl,data=mtcars,main="Car Mileage Data",xlab="Number of Cylinders", ylab="Miles Per Gallon",col=c("red","yellow","green"))
如图6所示。

图6 箱线图

5)散点图

散点图可以描述两个连续型变量间的关系。并且经过一些拟合,可以探索两个变量之间的关系:
> attach(mtcars)
#绘制散点图,定义点的类型、横纵坐标轴名以及标题
> plot(wt,mpg,main="Basic Scatter plot of MPG vs. Weight",xlab="Car Weight (lbs/1000)",ylab="Miles Per Gallon",pch=19)
#添加最佳拟合的线性直线,并定义颜色,线型,线宽
>abline(lm(mpg~wt),col="red",lwd=2,lty=1)
#添加平滑的曲线,并定义颜色,线型,线宽
>lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)
如图7所示。

图7 散点图

也可以添加第三个连续型变量,拓展成为三维散点图。
#加载scatterplot3d包
> library(scatterplot3d)
> attach(mtcars)
#绘制三维散点图
> scatterplot3d(wt, disp, mpg, pch=16,highlight.3d=TRUE, type="h",main="3D Scatter Plot with VerticalLines")
如图8所示。

图8 三维散点图