Rlab漫浮号怎么样?

说来我自己的本科设计就是做可视化相关的工作,虽然看上去很高大上,实际上只是ggplot2包的一个大型说明书而已(苦笑),接下来的若干篇笔记会从头开始整理R中绘图相关的内容,从最简单的图形基础到普通的图形,高级的图形,直到最后的ggplot2拓展包。在我看来,可视化工作是整个统计工作中最重要的一部分,好看的图片往往可以糊弄不少外行人,甚至ggplot2也不是绘图的终点,我们还可以用Adobe公司提供的软件进行后期制作,这些在不在笔记里提及了。本篇笔记的任务是:整理最基本的图形参数和图形制作方法。绘图本篇笔记用用到的简单数据集如下,是一个病人对两种药物的不同剂量的响应。我们预先将其输入到Drug变量中。直接绘图的核心函数是plot,plot(x,y,type="")是绘图的泛型函数,可以将x放在横轴,y放在纵轴,type决定是点或者是线或者是其它形式。比如我们绘制一个剂量和药剂A的折线图。别忘记先用attach()绑定,省功夫。其结果如图。plot(Amount,DrugA,"b")
很明显这张图过于苍白,我们需要一些图形参数。图形参数符号和线条下表给出了plot()中可以使用的图形参数pch 指定绘制的点的形状cex 指定点的形状大小,默认是1。0.5则是原来的一半大小,1.5则是原来的150%大小。lty 指定绘制的线条形状lwd 指定绘制的线条宽度,默认是1,2则生成两倍宽度,0.5则只有一半宽度。pch和lty样式表,其中pch中的21-25可以改变边界颜色(col=)和填充颜色(bg=)。那么我们尝试加入这两个参数。plot(Amount,DrugA,"b",lty=3,lwd=3,pch=15,cex=1.5)
稍微好了一点点吧。颜色下表给出了颜色参数:col #默认的绘图颜色,还可以循环使用,比如用col=c(“red”,“blue”)绘制三条线,将会是红蓝红的三条线。col.axis; col.lab; col.main; col.sub; #坐标轴刻度文字颜色、坐标轴标签颜色、标题颜色、副标题颜色。fg; bg; *前景色、后景色。在R中,有非常多方法指定颜色,比如col=1,col=“white”,col=“FFFFFF”,col=rgb(1,1,1)都是白色。一般而言后两种比较实用,可以生成不少柔和的颜色,也可以微调。此外还有其它创建颜色的方法,比如rainbow()可以生成连续的“彩虹型”颜色,不过就个人感受而言,通过col慢慢微调还是比较美观,在微调过程也有不少乐趣,只要不是在赶deadline的话。文本文本属性有更为大量的参数cex.?? #文本缩放倍数,前文有提及。**??**部分和col类似,去不同的函数时变化的是不同位置的文本。font.?? #文本字体样式,1=常规,2=粗体,3=斜体,4=斜粗体,5=自定义的符号字体。同样在后面加不同参数改变不同位置的文本。ps #字体磅值,文本的最终大小为ps*cex整个文字部分中最复杂的是字体族的映射family,这个我们可以通过后期工序来处理,因此这里略去不表。最后举一个例子:par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)
par()函数用于改变固定样式,当直接输入par()时会回到默认样式。上面语句的意思是将后续的图形创建固定为:斜体、1.5倍大小的坐标轴标签;粗斜体、2倍大小的标题。尺寸最后再提供两个参数控制图形的尺寸。pin #图形的宽和高mai #图形边界的大小,顺序是“下,左,上,右”,单位是英寸。比如:par(pin=c(4,3),mai=c(1,0.5,1,0.2))
会生成4*3的图像,上下边界是1英寸,左右边界是0.5和0.2英寸。现在,我们尝试用刚才的颜色、文本、边框函数对图像进行整改。opar <- par(no.readonly=T)
#保存当前图像设定
attach(Drug)
par(mfrow=c(1,2))
#mfrow可以将图像输出分块,在后面会讲到,这里的作用是将图像分成左右两部分。
par(pin=c(2,3))
#图形大小
par(lwd=2,cex=1.5)
#宽度和符号大小
par(cex.axis=0.75,font.axis=3)
#斜体,75%
plot(Amount,DrugA,type="b",pch=19,lty=2,col="red")
plot(Amount,DrugB,type="b",pch=22,lty=6,col="blue",bg="green")
par(opar)
#复原图像设定
比上一个版本增色不少,但是依然有问题,比如标题不明确,还有纵轴刻度不一致不好直接比较。自定义文字除了文字设定参数,我们还需要更改标题、坐标轴等内容,参数如下:标题title()函数可以添加标题和做标注轴标签,基本格式为title(main="",sub="",xlab="",ylab="")
分别设置主标题、副标题、x轴、y轴的文字。除此之外,还可以调用上面提到的参数,比如col.main="red"让标题成为红色。坐标轴坐标轴的调用有很多参数,核心是axis()函数,它带有下面的参数:side #一个整数,表示绘制坐标轴的位置,1=下,2=左,3=上,4=右labels #字符型向量,表示放在刻度线旁的文字标签pos #坐标轴线绘制位置的坐标(与另一条坐标轴相交位置的值)lty; col; #线条形状、颜色las #标签是否平行(=0)或垂直(=2)于坐标轴此外,可以通过abline()添加参考线,当然不一定要添加平行于x轴或y轴的参考线,调用格式为abline(y,x)图例图例可以识别不同的条形、扇形、折线等代指的数据。调用格式为legend(location,title,…)参数的意义是:location #图例的位置,有多种指定方法,可以直接给定x,y坐标,又或者用c=(“bottom”,“bottomleft”,“bottomright”,“left”,“center”,“right”,“topleft”,“top”,“topright”)其中一个title #图例的标题在省略号处有许多其它选项,比如对不同颜色的线条要指定col()的颜色值,对不同的点要指定pch()等。其它标注除此之外,我们还可以对图像进行文本标注text()和数学标注plotmath(),但是这两个用得都比较少,因此本篇笔记略去不谈。现在,我们再一次尝试用新的参数进行绘图:opar <- par(no.readonly=T)
par(lwd=2,cex=1.5,font.lab=2,font.axis=3)
plot(Amount,DrugA,type="b",pch=16,lty=1,col="red",ylim=c(0,50),main="DrugA vs DrugB",
xlab="Drug Amount",ylab="Drug Response")
lines(Amount,DrugB,type="b",pch=23,lty=2,col="blue",bg="green")
abline(h=c(25),lwd=1.5,lty=2,col="grey")
legend("bottomright",inset=0.1,title="Type",c("A","B"),lty=c(1,2),pch=c(16,23),
col=c("red","blue"))
par(opar)
这个结果基本能够达到要求了。图形组合最后我们来考虑下不同图形的组合,在这里我们探讨的是一般的通法。常用的组合方法是使用par(mfrow=())和layout(matrix())两个函数;前者较为简单,后者可以更为精细。下面两段代码给出的是分别用par和layout作图的,关于mtcars数据集的一些直方图的组合。opar <- par(no.readonly=T)
par(mfrow=c(3,1))
hist(wt); hist(mpg); hist(disp)
par(opar)
layout(matrix(c(1,1,2,3),2,2,byrow=T))
hist(wt); hist(mpg); hist(disp)
par(opar)
layout和matrix的语法不好掌握,需要稍加琢磨。至此我们已经完成了对绘图基础的描述,从简单的绘图到各种参数的运用,到图像的尺寸、排版,etc。但是我们依然没有跑出plot函数。其实plot()作为R中最基础的绘图函数,又怎么可能轻易跑出来呢?在图像排版的问题上,其实有更多的组合,但是这些组合没有定式,需要慢慢调整,这里就不展开了。在下一篇笔记中,我们将总结一些基本的图形。plot()主要绘制的是点线图,然而我们还有很多很多的图形需要学习。参考文献:R语言绘图样式设置
【免责声明:本文用于教学】本文要点:图形保存一. 函数plot二. 颜色三. 点四. 文字五. 线条六. 图例七. 坐标轴八. 子图准备:图形保存1. 输出到屏幕windows() #打开图形设备界面
plot(1:20)2. 输出到文件使用代码:getwd()
[1] "C:/Users/Administrator/Documents"
pdf("p.pdf")
plot(1:20)
dev.off()
类似的,可以用win.metafile(), bmp(), tiff(), svg(), postscript(), png(), jpeg()等保存为相应格式的图片文件。菜单方式:在RStudio,Plots——Export,Save as…练习:attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
pdf("mygraph.pdf")
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
dev.off()正文:R语言具有强大的图形可视化功能,可以逐条输入语句构建图形元素(颜色、点、线、文字、及图例等),逐渐完善图形特征,直到得到想要的效果。图形元素的显示可以用图形函数和par函数的绘图参数来改良,也可以用绘制图形元素的基础函数来控制。一、函数plot()
绘制二维散点图,基本格式为:plot(x, y=NULL, type = "p",
xlim=NULL, ylim=NULL,log="", main=NULL, sub=NULL, xlab=NULL, ylab=NULL,ann=..., axes=TRUE, frame.plot=axes, ...)其中,x, y为坐标值,要求长度相同;type指定图形的类型,默认为"p"(圆圈的点),"l"表示线,"b"表示点线,"c"表示挖去点的线,"o"穿过点的线,"s"和"S"表示两种阶梯形,"h"表示像直方图的竖线;xlim设定x轴的范围;ylim设定y轴的范围;log="x"或"y"或"xy",设置坐标值用e的幂次形式显示;main设定主标题;sub设定副标题;xlab设定x轴标签;ylab设定y轴标签;ann设置是否显示标题和坐标轴标签;axes设置是否显示坐标轴;frame.plot设置是否显示图形区域的外边框。二、颜色1. 绘图参数col用来设置图形元素的颜色R语言自带657种颜色,用函数colors()可显示它们的名字。R语言提供了固定调色板函数palette()包括8种颜色(可自定义,用palette("default")恢复默认),则用数字1~8表示相应的颜色。palette() #默认包含的8种颜色
[1] "black"
"red"
"green3"
"blue"
"cyan"
"magenta" "yellow" "gray"
设置图形颜色的例:attach(mtcars)
plot(wt,mpg,col="red")
points(wt[cyl==6], mpg[cyl==6],col=3)
points(wt[cyl==8], mpg[cyl==8],col=4)
cl=c("red","green","blue")
legend(5,35,c(4,6,8),pch=1,col=cl,bty = "n")
detach(mtcars)注:若设定颜色的整数>8,将取余。2. 生成渐变颜色R语言提供了一系列渐变颜色的生成函数,用来控制颜色值逐步变化。(1) RGB模型(红绿蓝混合)rgb(red, green, blue, alpha, max)将RGB颜色转化为16进制数值;max指定最大值255或1;red, green, blue在[0, max]中取值;alpha为透明度,0表示完全透明,取max值表示完全不透明;例如,rgb<-rgb(red=255,green=1:255,blue=0,max=255)生成 "#FF0100" "#FF0200"…"#FFFF00" 共255个颜色值,依次使用它们实现渐变效果。(2) 彩虹色(赤橙黄绿青蓝紫)rainbow(n, start, end, alpha)(3) 高温、白热化(红黄白)heat.colors(n, start, end, alpha)(4) 地理图形(绿黄棕白)terrain.colors(n, start, end, alpha)(5) 蓝青黄棕topo.colors(n, start, end, alpha)(6) 青白粉红cm.colors (n, start, end, alpha)其中,n设定产生颜色的数目;start和end设定该类颜色的一个子集,生成的颜色将从该子集中产生;alpha为透明度。(7) RColorBrewer包提供的3套配色方案col=brewer.pal(n, name)n为颜色数目(≥3);name为颜色组名。用display.brewer.all(type=...)设定调色方案:“seq”表示连续型(连续渐变);“div”表示极端型(用深色表示两端,浅色表示中间,可用来标记数据的离群点);“qual”表示离散型(生成一系列彼此差异比较明显的颜色,常用来标记分类数据)。cl=brewer.pal(3,"Dark2")
#使用RColorBrewer包配色方案
par(mfrow=c(1,1))
plot(wt,mpg,col=cl[1])
points(wt[cyl==6],mpg[cyl==6],col=cl[2])
points(wt[cyl==8],mpg[cyl==8],col=cl[3])
legend(5,35,c(4,6,8),pch=1,col=cl,bty="n")
cl=rainbow(3) #使用rainbow函数配色
plot(wt,mpg,col=cl[1])
points(wt[cyl==6],mpg[cyl==6],col=cl[2])
points(wt[cyl==8],mpg[cyl==8],col=cl[3])
legend(5,35,c(4,6,8),pch=1,col=cl,bty="n")
pie(rep(1, 12), col = rainbow(12))三、点用函数points()在画布中添加点,基本格式为:points(x, y, pch=…, cex=…, bg=…, font=…, lwd=…)其中,x, y为点的坐标位置;pch指定点的样式,取0~25或"*","."等符号:cex设定点的大小,默认为1(不缩放),小于1表示缩小,大于1表示放大;col设定点边框填充的颜色;bg设定点内部填充的颜色,仅限21~25号样式的点;font设置字体,默认为1表示正常字体,2表示粗体,3表示斜体,4表示粗斜体;lwd设置点边框的宽度,默认为1(不缩放),小于1表示缩小,大于1表示放大attach(mtcars)
head(mtcars,3)
mpg
cyl disp
hp drat
wt
qsec vs am gear carb
Mazda RX4
21.0
6
160
110 3.90 2.620 16.46 0
1
4
4
Mazda RX4 Wag
21.0
6
160 110 3.90 2.875 17.02
0
1
4
4
Datsun 710
22.8
4 108
93 3.85 2.320 18.61
1
1
4
1
cyl<-as.factor(cyl)
cyl
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
Levels: 4 6 8
plot(wt, mpg, col="white")
as.integer(cyl)
[1] 2 2 1 2 3 2 3 1 1 2 2 3 3 3 3 3 3 1 1 1 1 3 3 3 3 1 1 1 3 2 3 1
points(wt, mpg, pch=as.integer(cyl), col=as.integer(cyl))
legend(5, 35, c(4,6,8), pch=1:3, col=1:3, bty="n")
detach(mtcars)或者使用绘图参数改变点的样式,结果是一样的:plot(wt, mpg, pch=as.integer(cyl), col=as.integer(cyl))
legend(5, 35, c(4,6,8), pch=2:4, col=2:4, bty="n")四、文字文字属性参数:cex设定字体大小,默认为1(不缩放),小于1表示缩小,大于1表示放大;col设定字体颜色;font设置字体样式,默认为1表示正常字体,2表示粗体,3表示斜体,4表示粗斜体。1. 函数title()——给图形添加标题基本格式为:title(main=..., sub=..., xlab=..., ylab=...,outer=FALSE, ...)其中,main为主标题,sub为副标题,xlab为x轴标题,ylab为y轴标题,它们的值都是列表list(text, font=, col=, cex=, …);outer,默认为FALSE,设置是否把标题在图形区域外面显示。实例:plot(c(0:5),col="white",xlab="",ylab="")
title(main=list("主标题",cex=1.5),sub=list("副标题",cex=1.2), xlab="x轴标题",ylab="y轴标题")
例:title(main="My Title", col.main="red",sub="My Subtitle", col.sub="blue",
xlab="My X label", ylab="My Y label",col.lab="green", cex.lab=0.75)2. 函数text()——向图形任意位置添加文字基本格式为:text(x, y=NULL, labels=..., cex=1, col=NULL, font=NULL, ...)其中,x, y设定文字的位置;labels为文字内容。实例:plot(c(0:5),col="white")
text(3,2,labels="font=4:粗斜体字体",font=4, cex=1.5)3. 函数mtext()——向图形的四条边上添加文字基本格式为:mtext(text, side=3, line=0, cex=NA, col=NA, font=NA, ...)其中,text为文字内容;side设置哪一条边,1表示下,2表示左,3表示上,4表示右;line设置文字与图形边缘的距离,默认为0实例:mtext("side=1:下边",side=1,line=2);
mtext("side=2:左边" ,side=2,line=2)
mtext("side=3:上边",side=3);
mtext("side=4:右边" ,side=4) cyl=as.factor(cyl)
plot(wt,mpg,col="white",xlab="",ylab="")
text(wt,mpg,cyl,col=as.integer(cyl)+1)
title(main=list("Miles per Gallon vs. Weight by Cylinder",cex=1.5),xlab="Weight",ylab="Miles per Gallon")
#或者通过绘图参数实现相同的效果
plot(wt,mpg,pch=as.character(cyl),col=as.integer(cyl)+1,xlab="Weight",ylab="Miles per Gallon ", main="Miles per Gallon vs. Weight by Cylinder", cex.main=1.5)例: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)五、线条线条属性参数:lty设置线条样式,用数字表示:lwd设置线条粗细,默认为1(正常宽度),小于1(变细),大于1(变粗)。1. 函数lines()——绘制曲线基本格式为:lines(x, y, type="l",lty=, lwd=, col=, ...)其中,x,y为点的坐标位置。实例:lines(x,y,lwd=1.5,lty=1,col="red")
plot(c(-4,4),c(-1,10),col="white")
x<-seq(-3,3,0.1)
y<-x^2
lines(x,y,lwd=1.5,lty=1,col="red")2. 函数abline()——绘制直线基本格式为:abline(a, b, h, v, reg=, coef=, lty=, lwd=, col=, ...)其中,a为截距,b为斜率,即y = a + bx;h为绘制水平线的纵轴值,v为绘制垂直线的横轴值;reg和coef可用来提取线性回归的结果绘制直线,例如z <- lm(dist ~ speed, data = cars)
plot(cars)
abline(reg = z) #同abline(z),也同下句:
abline(coef = coef(z))实例:plot(c(0:10), col="white")
abline(h=c(3,5))
abline(v=c(4,7,9), lty=2, col="blue")
abline(a=2,b=1,lwd=1.5,col="red")3. 函数segment()——绘制线段
函数arrows()——绘制带箭头的线基本格式为:segments(x0, y0, x1, y1, lty=, lwd=, col=…)arrows(x0, y0, x1, y1, angle=, length=, lty=, lwd=, col=…)其中,x0, y0为起点坐标,x1, y1为终点的坐标;angle设置箭头与线段之间的夹角;length设置箭头的长度。实例:plot(c(0:10),col="white")
segments(2,1,4,8)
arrows(4,0,7,3,angle=30, lty=2, col="red")
arrows(4,2,7,5,angle=60, col="green")4. 函数grid()——给图形添加网格线基本格式为:grid(nx =, ny=nx, col="lightgray", lty="dotted",lwd=, equilogs=TRUE)其中,nx设置水平网格的数目,ny设置垂直网格的数目;euilogs默认为TRUE,表示当坐标取对数后,仍使用等距的网格线,若为FALSE表示根据对数函数使用不等距网格线。实例:plot(c(0:10),col="white")
grid(nx=4,ny=8,lwd=1,lty=2,col="blue")5. 函数rug()——添加坐标轴须(小竖线),标示出相应坐标轴上的变量数值的具体位置,坐标轴须的分布意味着该变量的分布。基本格式为:rug(x, ticksize=0.03, side=1, lwd=, col=, ...)其中,x为向量,给出坐标轴须的位置;ticksize为坐标轴须的长度;side指定坐标轴须位置,1表示x轴,2表示y轴,3表示顶端,4表示右端;实例:set.seed(123)
x<-rnorm(500)
plot(density(x))
rug(x,col="blue")综合绘图的例:attach(mtcars)
#mpg归一化
smpg=(mpg-min(mpg))/(max(mpg)-min(mpg))
plot(wt,smpg,ylab="mpg 归一化")
lines(density(wt), col="red") #添加核密度曲线
arrows(1.8,0.05, 1.5,0.1, angle=10, cex=0.5)
text(2,0.05, "核密度曲线", cex=0.6)
#添加回归线
abline(lm(smpg~wt), lty=2, col="green")
arrows(2,0.5,2,0.7, angle=10, cex=0.5)
text(2, 0.45, "回归线", cex=0.6)
#wt与mpg负线性相关,添加最大最小值线段来表示该关系
segments(min(wt),max(smpg), max(wt), min(smpg), lty=3, col="blue")
arrows(3,0.8,2.5,0.76, angle=10, cex=0.5)
text(3.3, 0.8, "最大最小值线段", cex=0.6)
grid(nx=4,ny=5, lty=2, col="grey")
detach(mtcars)用plot函数使用图形参数,也可以分别绘制:plot(density(wt),col="red") #核密度曲线
plot(wt,fitted(lm(smpg~wt)), type="l", lty=2, col="green") #回归线
plot(seq(min(wt),max(wt),length=100),seq(max(smpg),min(smpg),length=100),type="l",lty=3,col="blue")#最大最小值线六、图例图例一般放在图形的空白区域,用来标识每种图形符号分别代表什么,使用legend函数实现,基本格式为:legend(x, y, legend, fill=NULL, col=, border="black",lty, lwd, pch, bty="o", bg=, ncol=1, horiz=FALSE,title= NULL, xpd, ...)其中,x, y设置图例的位置(默认为左上角),也可使用“bottomright”、“bottom”、“bottomleft”、“left”、“topleft”、“top”、“topright”、“right”、“center”;legend为字符向量,表示图例中的文字;fill设置填充颜色;col设置图例中点或线的颜色;border设置边框颜色;horiz设置图例的排列方式,默认FALSE(垂直排列),TRUE为水平排列;ncol设置图例的列数目,若horiz=TRUE,该项无意义;pch设置图例中点的样式,取值0~25;lty设置图例中线的样式,取值0~6;bg设置图例的背景颜色;bty设置图例框的样式,默认“o”表示显示边框,“n”表示无边框;xpd设置是否在区域外放置图例,默认FALSE;title设置图例标题。实例可参考【一、颜色】中的例。 例: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(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=.05, title="Drug Type", c("A","B")
lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
par(opar)七、坐标轴
设置主坐标轴(x轴,y轴)的范围和刻度标记,以及副坐标轴(右侧纵坐标)的相关属性,使用axis函数实现,基本格式为:axis(side, at=NULL, labels=TRUE, tick=TRUE,pos=, xlim=, ylim=, outer=FALSE, font=, col=, lty="solid", lwd=1, lwd.ticks=, col.ticks=, axes=TRUE,las=, xhat=, yhat=, xaxs=, yaxs=,...)其中,side表示哪个坐标轴,1, 2, 3, 4分别表示下, 左, 上, 右;at设置坐标轴各刻度标记的位置;labels设置坐标值各刻度的名称(与at参数一致);tick设置是否画出坐标轴;pos设置原点坐标;xlim, ylim设置坐标轴范围,c(from, to);outer设置是否将坐标轴绘制在图形区域之外;font设置刻度标记的字体:1正常,2粗体,3斜体,4粗斜体;lty设置坐标轴的样式:0不画线,1实线,2虚线,3点线;lwd设置坐标轴的宽度:1正常,小于1变细,大于1变粗;lwd.ticks和col.ticks分别设置刻度线的宽度和颜色;las设置标签是否平行于坐标轴:0平行于坐标轴,1水平,2垂直于坐标轴,3竖直;axes设置是否显示坐标轴;默认TRUE显示坐标轴;xhat, yhat设置坐标值样式,默认“s”标准样式,“n”隐藏x或y轴;xaxs, yaxs坐标轴长度,默认“r”数据范围再扩大4%,“1”原始数据范围。实例:plot(c(1:12), col="white", xaxt="n", yaxt="n", ann=FALSE) #绘制空白画布,不要坐标轴
axis(1,at=1:12,col.axis="red",labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"))
axis(2,at=seq(1,12,length=10),col.axis="red",labels=1:10,las=2)
axis(3,at=seq(1,12,length=7),col.axis="blue",cex.axis=0.7,tck=-.01,labels=c("Mon","Tues","Wed","Thu","Fri","Sat","Sun"))
axis(4,at=seq(1,12,length=10),col.axis="blue",cex.axis=0.7,tck=-.01,labels=round(seq(0,1,length=10),1),las=2)
例: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)
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=-.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)八、子图要在一张画布上放置m×n个子图,可以用函数par和layout实现。1. 函数par()该函数可以设置大多数绘图全局参数。子图相关的参数:mfrow/mfcol=c(m,n), 把画布分为m×n份(m行n列),mfrow表示逐行从左到右作图,mfcol表示逐列从上到下作图;mai/mar=c(b, l, t, r), 设置图形边距,四个数分别为下、左、上、右边距,mai以英寸为单位,mar以行为单位;mgp设置坐标轴位置,3维数值向量,分别为标题、刻度标签、刻度的位置;oma设置外边界宽度,类似mar,默认为c(0, 0, 0, 0)实例:mfrow1=par(mfrow=c(2,3)) #将图形按2行3列排列
for(i in 1:6) {
plot(c(1:i), main=paste("I'm image: ", i))
}#改变图形边距mar1<-par(mar=c(4,5,2,3))
for(i in 1:6) {
plot(c(1:i), main=paste("I'm image: ", i))
}
par(mar1) #去除par()函数mar参数的设置mar1#改变外边界宽度
oma1=par(oma=c(4,5,2,3))
for(i in 1:6){
plot(c(1:i),main=paste("I'm image:",i))
}
par(oma1) #去除par()函数oma参数的设置oma1#改变坐标轴位置
mgp1=par(mgp=c(1,2,3))
for(i in 1:6){
plot(c(1:i),main=paste("I'm image:",i))
}
par(mgp1)
#去除par()函数mgp参数的设置mgp1
par(mfrow1) #去除par()函数mfrow参数的设置mfrow12. 函数layout()该函数可以不均等地分割画布,基本格式为:layout(mat, widths=http://rep.int(1, ncol(mat)),heights=http://rep.int(1, nrow(mat)), respect=FALSE)其中,mat为矩阵,提供了作图的顺序以及图形分布的安排,矩阵中的元素为数字1~n,图形顺序和图形方格的顺序相同,相同数字的部分合并成一个绘图区;例如,mat
=
1
1
2
3
34
4
5
5
6表示共6个子图,放两行,第1行:子图1占2个宽度,子图2占1个宽度,子图3占2个宽度;第2行:子图4占2个宽度,子图5占2个宽度,子图6占1个宽度。widths和heights提供了各个子图区域的长宽比例;respect控制各图形内的横纵轴刻度长度的比例尺是否一样。实例:mat<-matrix(c(1,1,2,3,3,4,4,5,5,6), nrow = 2, byrow = TRUE)
layout(mat)
for(i in 1:6){
plot(c(1:i),main=paste("I'm image:",i))
}练习1:
让我们从表3-1中给出的假想数据集开始。它描述了病人对两种药物五个剂量水平上的响应情况。
输入数据:dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
使用以下代码可以创建一幅描述药物A的剂量和响应关系的图形:plot(dose, drugA, type="b")
假设你想使用实心三角而不是空心圆圈作为点的符号,并且想用虚线代替实线连接这些点。你可以使用以下代码完成修改:plot(dose, drugA, type="b", lty=2, pch=17)或者opar <- par(no.readonly=TRUE)
par(lty=2, pch=17)
plot(dose, drugA, type="b")
par(opar)
假设你要绘制一幅图形,其线条类型为点线,宽度为默认宽度的3倍,点的符号为实心正方形,大小为默认符号大小的2倍plot(dose, drugA, type="b", lty=3, lwd=3, pch=15, cex=2)
以下,首先保存当前的图形参数设置(这样就可以在稍后恢复设置)。接着,修改默认的图形参数,得到的图形将为2英寸宽、3英寸高。除此之外,线条的宽度将为默认宽度的两倍,符号将为默认大小的1.5倍。坐标轴刻度文本被设置为斜体、缩小为默认大小的75%。之后,使用红色实心圆圈和虚线创建了第一幅图形,并使用绿色填充的绿色菱形加蓝色边框和蓝色虚线创建了第二幅图形。最后,还原初始的图形参数设置。opar <- par(no.readonly=TRUE)
par(pin=c(2, 3))
par(lwd=2, cex=1.5)
par(cex.axis=.75, font.axis=3)
par(mfrow=c(1,2))
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="green")
par(opar)
在图形上添加了标题(main)、副标题(sub)、坐标轴标签(xlab、ylab)并指定了坐标轴范围(xlim、ylim)plot(dose, drugA, type="b",col="red", lty=2, pch=2, lwd=2,main="Clinical Trials for Drug A",sub="This is hypothetical data",xlab="Dosage", ylab="Drug Response",xlim=c(0, 60), ylim=c(0, 70))练习2:以下代码创建了四幅图形并将其排布在两行两列中:attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
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)
让我们依三行一列排布三幅图形。代码如下:attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)函数layout()的调用形式为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形的所在位置。在以下代码中,一幅图被置于第1行,另两幅图则被置于第2行:attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
为了更精确地控制每幅图形的大小,可以有选择地在layout()函数中使用widths=和heights=两个参数。在以下代码中,我们再次将一幅图形置于第1行,两幅图形置于第2行。但第1行中图形的高度是第2行中图形高度的二分之一。除此之外,右下角图形的宽度是左下角图形宽度的三分之一:attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
widths=c(3, 1), heights=c(1, 2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)练习3通过在散点图上添加两幅箱线图,创建了单幅的增强型图形。opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8))
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=TRUE, axes=FALSE)
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)
boxplot(mtcars$mpg, axes=FALSE)
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)

我要回帖

更多关于 一个很像r的特殊符号 的文章