R语言绘图
本文转载自Category: DataVisualization,对于不明白的地方加了自己检索后的说明。
使用demo(graphics),可以查看R漂亮的图像演示。
点
1 | set.seed(1234) |
其中set.seed(),该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性。如果不设定种子,生成的随机数无法重现。
1 | sample(x, size, replace = FALSE, prob = NULL) |
x可以是任何对象,
size规定了从对象中抽出多少个数,size应该小于x的规模,否则会报错
replace默认是FALSE,表示每次抽取后的数就不能在下一次被抽取;TRUE表示抽取过的数可以继续拿来被抽取
正态分布随机数rnorm()
句法是:rnorm(n,mean=0,sd=1) 其中n表示生成的随机数数量,mean是正态分布的均值,默认为0,sd是正态分布的标准差,默认时为1
绘制一个最简单的散点图:
1 | plot(x=x,y=y) |
其中x=x左侧的x表示横坐标,右侧的是数据名,y的相同。当然,x和y都是可以省略的。也可以使用plot(formula)
这样的形式去绘制散点图:plot(y~x)
添加标题和标签
1 | plot(x,y,xlab="name of x",ylab="name of y",main="Scatter Plot") |
设置坐标界限
可先用range(x)
或range(y)
查看x,y的取值范围
1 | plot(x,y,xlab="name of x",ylab="name of y",main="Scatter Plot",xlim=c(1,100),ylim=c(0,250)) |
更改字符
默认情形下,绘图字符为空心点,可以使用pch选项参数进行更改
1 | plot(x,y,xlab="name of x",ylab="name of y",main="Scatter Plot",xlim=c(1,100),ylim=c(0,250),pch=19) |
pch的取值与其对应的图形字符,也可以使用plot绘制:
1 | a<-rep(1:5,each=5) |
更改颜色
默认情况下,R绘制的图像是黑白的。但其实,R中有若干和颜色相关的参数:
1 | plot(x,y,main="Plot",sub="Scatter Plot",col="red",col.axis="green",col.lab="blue",col.main="#999000",col.sub="#000999",fg="gray",bg="white") |
其中:
参数 | 作用 |
---|---|
col | 绘图字符的颜色 |
col.axis | 坐标轴文字颜色 |
col.lab | 坐标轴标签颜色 |
col.main | 标题颜色 |
col.sub | 副标题颜色 |
fg | 前景色 |
bg | 背景色 |
更改尺寸
与颜色类似,存在若干参数可以用来设置图形中元素的尺寸,而且与上表中设置颜色的参数相对应,只需将col更换成cex即可:
1 | plot(x,y,main="Plot",sub="Scatter Plot",cex=0.5,cex.axis=1,cex.lab=0.8,cex.main=2,cex.sub=1.5) |
线
有时候,我们不仅需要散点图,更需要折线图,比如在时间序列当中:
1 | t <- 1:50 |
注意,type的取值:
what type of plot should be drawn. Possible types are
- “p” for points,
- “l” for lines,
- “b” for both,
- “c” for the lines part alone of “b”,
- “o” for both ‘overplotted’,
- “h” for ‘histogram’ like (or ‘high-density’) vertical lines,
- “s” for stair steps,
- “S” for other steps, see ‘Details’ below,
- “n” for no plotting.
更改线条类型
R中提供了很多类型的线条,可以通过lty选项来设定,如下:
1 | a<-c() |
更改颜色
与前面更改点的颜色方法相同!
线条变宽
1 | plot(t,v,type="l",lwd=2) |
点与线
有时候,我们还需要将点突出出来,此时需要利用type选型:
1 | plot(t,v,type="b") |
type选项可以指定plot()函数绘制的类型,可以使用help(plot)查看。
散点图与平滑线
在做线性回归时,我们常常会在散点图中添加一条拟合直线以查看效果:
1 | model <- lm(y~x) |
有时候,我们需要在散点图上画一条拟合的平滑线,一般使用loess:
1 | plot(x,y) |
当然,在R语言中要实现上面的图形有很多简单地方法,这里介绍两个:
- 使用car包中的scatterplot()函数
1 | library(car) |
其中,直线为线性拟合,虚线为loess曲线拟合,边界为箱线图!
在函数中smoother.args选项指定曲拟合的参数,smoother选项指定是否使用曲线拟合,以及用什么方法进行曲线拟合。当然,如果不需要曲线平滑拟合,那么可以将smoother=FALSE。
使用以下语句安装需要的软件包
1 | install.packages( pkgs = "car", dependencies = TRUE ) |
- 使用ggplot2包
ggplot2是学习R语言制图的一座大山,它提供了一个基于全面而连贯的语法的绘图系统。功能非常强大,而且弥补了R中自带图形绘制的很多缺点。
使用这个包,实现的方法一般有两种,就是使用qplot()函数和ggplot()函数
1 | qplot(x,y,geom=c("point","smooth"),method="lm",se=FALSE)+geom_smooth(method="loess",color="red",se=FALSE,LTY=2) |
或者
1 | ggplot(aes(x,y),data=dataSet)+geom_point() + geom_smooth(method="lm",color="green",lty=1,se=FALSE) +geom_smooth(method="loess",color="red",lty=2,se=FALSE) |
饼图
饼图,就是将一个圆(或者圆饼)按分类变量分成几块,每一块所占的面积比例就是相对应的变量在总体中所占的比例。
1 | year<-2001:2010 |
条形图
条形图就是通过垂直或者水平的条形去展示分类变量的频数。
1 | year<-2001:2010 |
当每一年有两个变量指标时,可以绘制堆砌条形图和分组条形图:
1 | set.seed(4321) |
1 | barplot(count,col=rainbow(10),beside = TRUE,legend=rownames(count)) |
直方图
前面介绍的两种图形,一般都是用来处理离散数据的。那么对于连续数据,常用的图形就有这里所说的直方图。直方图在横轴上将数据值域划分成若干个组别,然后在纵轴上显示其频数。通过这种方式,可以将连续的点离散化,从而来描述连续型变量的分布。
在R语言中,可以使用hist()函数来绘制直方图:
1 | ##构造数据 |
当然,可以使用ggplot2包中的函数绘制直方图:
先试试qplot()
函数:
1 | x<-rnorm(100,0,1) |
再试试ggplot()
函数:
1 | x<-rnorm(100,0,1) |
箱线图
还有一种常用的图形,就是箱线图,也称盒须图。它通过绘制连续型变量的五个分位数(最大最小值、25%和75%分位数以及中位数),描述变量的分布。
1 | x1<-x |
基础绘图系统
基础绘图系统,即是R语言自带的绘图系统。R中核心的绘图系统主要基于以下两个包:
- graphics包,此包包含了基础绘图系统的绘图函数,比如:plot(),hist()等等;
- grDevices包,此包包含了各类型的图形设备(graphics devices),包括:X11,PDF,PNG等等。
基础绘图系统总是从一幅空画布开始绘制图形,首先使用plot()这样的函数在空画布上画出图形,然后使用注释函数对图形进行添加或者修改,一般来说就是添加或者修改显示的文本、辅助线、辅助点以及标题等等。对于这样的一个流程,它可以很方便我们去使用,因为这样的流程可以完全将我们的思路反应出来。它就是通过一系列的R语言命令,一步一步地按照心中预想的绘图方式将其绘制出来。
这样的绘图方式在给予我们方便的同时,也带来了一些弊端。首先,我们必须事先安排好图形应该如何绘制,因为一旦我们开始绘制就不能后退了;此外,当一幅图形绘制完成,我们就不能对其进行修改了,因为基础绘图系统没有绘图语言(graphical “language”)。
基础绘图一般来说:就是使用一系列单独的函数调用,将图形的各个零散的部分组合起来。
利用mtcar数据集,做个示例:
1 | ## 取出感兴趣的数据 |
Lattice
Lattice一般会使用以下两个包:
- lattice包:包含于基础绘图独立的,能够生成Trellis graphics的代码,包括xyplot,bwplot等等;
- grid包:lattice包建立在此包之上,在使用中很少直接调用这个包。
Lattice与基础绘图系统的一个非常明显的区别在于:所有的绘图以及注释都在一次函数调用中完成。
Lattice很擅长绘制需要分类的图形,比如说,想要根据不同的level,绘制y与x的散点图。这个在基础绘制系统中还是蛮麻烦的,但是在Lattice中就比较容易。也就是说,Lattice通过一维、二维或三维的条件绘图(即是Trellis),对多元变量关系进行直观展示。
由于其所有的绘图与注释都需要在一次函数调用中完成,所以在使用之前就需要做好准备,因为一旦图形绘制好,就什么也不能添加了,接着上面的数据集做实例:
1 | library(lattice) |
ggplot2
ggplot2是基于一种全面的图形语法,提供了一种全新的图形创建方法。能够自动处理位置、文本等等注释,也能够按照需求自定义设置。默认情况下有很多选项以供选择,在不设置时会直接使用默认值。
1 | library(ggplot2) |