微信号:gh_d249a545f417

介绍:R语言基础的学习与交流 R语言与医学统计学

R语言入门第16讲:基础绘图(五)

2016-10-15 23:38 Anonymous

今天第16~~~~

 

 

今天继续给大家介绍几个绘图函数。

 

第一个是绘制线段的函数segments。定义为在一对点中画线。也就是线段。我们看看其基本格式:

> par(mfrow=c(1,2))

> plot(x=c(0,1),y=c(0,1),xlab="x",ylab="y")

> segments(0,0,1,1)

> x=c(5,5,5,4,6)

> y=c(5,6,4,5,5)

> plot(x,y,xlim=c(1,10),ylim=c(1,10),col=1:5)

> segments(5,5,x,y)


其中第一行代码设置在一个平面画两幅图,第二行代码画了两个点(00)和(11)。第三行代码就是segments的使用。很容易看出,该函数的前两个参数是线段起点(x0y0),后两个参数是线段终点(x1y1)。这样就生成了下面的左边这幅图。如果大家明白了,那么后四行就是右边的图,也就是说先画出了(55),(56),(54),(45),(65)这5个点,然后从点(55)出发,向其它各点画线段。

实际应用中并不需要先绘制点,只要把起点坐标和终点坐标指定就可以了,但前提是你必须要有一个模版来画线段:

> plot(5,5,type="n",ann=F,axes=F)

> segments(5,5,x,y,lty=1:4,lwd=1:4,col=1:4)


第一行代码首先创建了一个模版:type=n使点不被画出,ann=F使坐标轴标签不被画出,axes=F使坐标轴不被画出。所以如果你运行了第一行代码,实际上你发现什么都没有绘出。第二行则绘制了与前面相同的4条线段,并定义了各自线条样式(lty)、宽度(lwd)以及颜色(col)。

 

下面再介绍一个函数rect,用来绘制矩形(rectangular)。它的基本参数实际上是左下和右上两个点,然后其它的就是点缀了:

> plot(5,5,type="n",ann=F)

> rect(3,3,4,4)

> rect(3,5,4,6,col="blue")

> rect(5,3,6,5,lty=2)

> rect(4.5,5.5,6,6,lwd=2)

> rect(5,6.1,6,6.5,density=30,col="red")

> rect(5,6.7,6,7,density=60,col="green",angle=90)


第一行代码给出了一个画图的平台(没有绘制点和坐标轴标签),这里面我给出了坐标轴,为了更好地说明如何画一个矩形。第二行我们使用了两个点(33),(44)作为矩形的对角线并绘制了一个矩形。第三行代码绘制了蓝色的矩形,第四行代码绘制了虚线边框的矩形因为我们定义了参数lty,第五行代码绘制了一个粗线矩形,因为我们定义了参数lwd。第六行代码绘制了一个红色并且有45°密度线的矩形,参数是densityangle=45(默认值)。第七行代码绘制了一个绿色并且有90°密度线,密度更高的矩形。

> plot(5,5,ann=F,type="n",axes=F)

> rect(3,3,4,4,col=2,border=T)

> rect(3,4.1,4,5,col=3,border=F)

> rect(4.1,3,5,4,col="yellow",density=15,border=T)

>par(fg="blue")

> rect(6,6,7,7,col="thistle")


这幅图展示了参数border(边界)的使用。第二行代码绘制了红色矩形但是边界颜色没有变(或者说带边界),第三行代码绘制了绿色不带边界的矩形,第四行代码绘制了黄色带边界的矩形。第五行用par中的参数fg首先定义了边框的颜色,然后绘制了一个紫色的矩形。和bg是填充图形的背景(background)颜色一样,fg定义图形的前景(foreground)颜色。这里面提醒大家,我们用par函数定义完以后,如果不再需要这种定义,一定要使par改变为默认值,否则后果就与我们想象的千差万别。


下面介绍par函数中pinusr这两个参数。参数pin代表绘图的维度,以英寸表示:

> pin=par("pin")

> pin

[1] 4.520416 3.909999

输入这行代码我们能够得到R中的绘图界面的维度(各个版本------至少我所用的RRstudio的输出结果可能会不相同),第一个数字代表宽度,第二数字代表高度。也就是说目前绘图的范围大约在4.5*3.9范围内。

> usr=par("usr")

> usr

[1] 0 1 0 1

参数usr是一个四个参数的向量(x1x2y1y2),显示的是绘图区域的范围。可以看到,R默认的绘图区域是水平范围在0~1,竖直范围也是0~1.

pin结合起来,也就是说在绘图区域的1个单位内,pin的宽度约为4.5英寸,而长度约为3.9英寸。

> usr[1:2]

[1] 0 1

> usr[3:4]

[1] 0 1

这两行代码也可以理解为x轴的范围和y轴的范围。


接下来我们绘制一个真实的刻度线(暂且称它是一把尺子),来综合运用一下我们今天介绍的函数[1]

> plot(0:1,0:1,type="n",axes=F,ann=F)

> usr=par("usr")

> pin=par("pin")

> xcm=diff(usr[1:2])/(pin[1]*2.54)

> ycm=diff(usr[3:4])/(pin[2]*2.54)

> rect(0+0.2*xcm,0-0.2*ycm,1+0.2*xcm,1-0.2*ycm,col="gray",border=NA)

> rect(0,0,1,1,col="white")

> text(8.2*xcm,0.6*ycm,"cm",adj=c(0,0))

> text(1:8*xcm,0.6*ycm,0:7,adj=c(0.5,0))

> a=rep(c(0.5,rep(0.25,4),0.35,rep(0.25,4)),7)

> segments(seq(1,8,0.1)*xcm,0,seq(1,8,0.1)*xcm,a*ycm)


下面我们来一步一步解读。第一行绘制了两个点(00)和(11),但是没有画出点、轴和坐标的标签。第二行和第三行我们将绘制该图时par默认的usrpin调了出来,第四行与第五行代码将英寸换算成厘米(换算单位是2.54),diff代表差值,这里分别代表x2x1以及y2y1的差值。我们输入一下:

> diff(usr[1:2])

[1] 1.08

> diff(usr[3:4])

[1] 1.08

也就是说在绘制plot(0:1,0:1)这幅图时,x轴和y轴的范围分别是1.081.08。这么一解释,大家就好理解第四行和第五行是如何将英寸换算成厘米的了。

第六行我们创建了第一个矩形,为灰色,第七行创建了第二个矩形,为白色,覆盖在了灰色上面,突出了阴影效果:


第八行和第九行代码在底部添加了文本cm,和数字1~7。这里面所有坐标位置上都对数据进行英寸对厘米的转换(即乘以一个xcmycm),adj设置文本的位置。最后两行我们设置每一毫米的刻度线。结合这把“尺子”,我再给大家分解一下向量a,就会一目了然:

c(0.5,rep(0.25,4),0.35,rep(0.25,4))

[1] 0.50 0.25 0.25 0.25 0.25 0.35 0.25 0.25 0.25 0.25

10个数字,代表0-0.9毫米处的线段长度。

> rep(c(0.5,rep(0.25,4),0.35,rep(0.25,4)),7)

这行代码是将上一个向量重复了7次,自然也就是0-7cm处的所有毫米刻度的线段长度了。

最后我们用segments将它们绘制在对应位置就可以了。


事实上,只要我们找准线段segments是从那个起点(x0y0)绘制到哪个终点(x1y1),我们可以在任意一条线上添加刻度线。(大家可以自己尝试垂直的,斜着的,各种角度的~~~

 

 

好了,今天就介绍到这里~~~

 

 

 

 

 

 

[1]:参考《R绘图系统》(第二版),Paul Murrel著(呼思乐,张晔,蔡俊译)

 

 

 

 

 

 

 

 

 

(图片来源于网络)


 
负基础学R语言 更多文章 R语言入门第15讲:二项分布 R语言入门第14讲:基础绘图(四)------par函数(3) R语言入门第13讲:基础绘图(三)------par函数(2) R语言入门第十二讲:基础绘图(二)------plot与par函数(1) R语言入门第十一讲:基础绘图(一)------plot
猜您喜欢 若将沃森应用于美网公开赛,将会怎样#IBM与体育# FEX 技术周刊 - 2015/11/02 R语言入门第十二讲:基础绘图(二)------plot与par函数(1) 互联网小事儿:中文互联网终于有了排版规范 一款现代化的 Sublime Text 主题 – ayu