找回密码
 立即注册
查看: 546|回复: 1

R语言图形处理初级

[复制链接]
发表于 2021-11-22 08:28 | 显示全部楼层 |阅读模式
    连接:我的学习笔记之R语言----数据结构(一)


    连接:R语言数据结构(二)


图形初阶

1、使用图形
(1)把绘制的图形存储成PDF格式的图片:
> pdf("mygraph.pdf")
> plot(dose,drugA,type='b')
> title("Dose and DrugA")
> dev.off()
文件存到了默认的工作目录中,结果如图所示:



(2)同时创建多张图
> dose<-c(20,30,40,45,60)
> drugA<-c(16,20,27,40,60)
> drugB<-c(15,18,25,31,40)
> dev.new()
> plot(dose,drugA,type='b', main="Dose and DrugA")
> dev.new()
> plot(dose,drugB,type='b', main="Dose and DrugB")



dev()的用法:dev()里有几种用法
        dev.cur():现在激活的window窗口是哪个
        dev.list():总共有几个window窗口
        dev.next(which = dev.cur()):下一个window窗口
        dev.prev(which = dev.cur()):上一个window窗口
        dev.off(which = dev.cur()):关闭窗口
        dev.set(which = dev.next()):选择要使用的 window窗口
        dev.new():生成一个新的窗口
举例说明:
A:比如我要生成两个新的窗口
> dev.new()
> dev.new()



B:查看总共有几个窗口,并且当前激活的是哪个窗口
> dev.list()
windows   windows ------------------总共有2个窗口
      2       3
> dev.cur()
windows -------------------------------当前激活的窗口是3号窗口
      3
C:上一个窗口是哪个
> dev.prev()
windows
      2
D:选中2号窗口,并画图plot()
> dev.set(which=2)
windows
      2
> plot(dose,drugA,type='b')



E:下一个窗口是哪个
> dev.next()
windows
      3
F:选中3号窗口,并画图plot()
> plot(dose,drugB,type='l')


2、图形参数
我们可以通过修改称为图形参数的选项来自定义一幅图形的多个特征(字体、颜色、坐标轴、标题)。(修改图形参数的)一种方法是通过函数par()来指定这些选项。以这种方式设定的参数值除非被再次修改,否则将在会话结束前一直有效。其调用格式为par(optionname=value,optionname=name,…)。不加参数地执行par()将生成一个含有当前图形参数设置的列表。添加参数no.readonly=TRUE可以生成一个可以修改的当前图形参数列表。
举个例子:
opar<-par(no.readonly=TRUE)------------保存当前图形参数设置
par(lty=2,pch=17)-------------线条类型修改为虚线,默认的点符号改为了实心三角
plot(dose,drugA,type='b')-------------图b
par(opar)------------------还原初始图形参数设置
plot(dose,drugA,type='b')--------------图a


                                                                               图a                                                                                                                                                    图b
2.1 符号和线条
可以使用图形参数来指定绘图时使用的符号和线条类型





举例:> plot(dose,drugA,type='b',lty=3,lwd=3,pch=15,cex=2)



2.2 颜色
R中有若干和颜色相关的参数,下面是些常用参数



在R中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。举例来说,col=1、col="white"、col="#FFFFFF"、col=rgb(1,1,1)和col=hsv(0,0,1)都是表示白色的等价方式。函数rgb()可基于红—绿—蓝三色值生成颜色,而hsv()则基于色相—饱和度—亮度值来生成颜色。
函数colors()可以返回所有可用颜色的名称。R中也有多种用于创建连续
型颜色向量的函数,包括rainbow()、heat.colors()、terrain.colors()、topo.colors()以及cm.colors()。举例来说,rainbow(10)可以生成10种连续的“彩虹型”颜色。多阶灰度色可使用gray()函数生成。这时要通过一个元素值为0和1之间的向量来指定各颜色的灰度。gray(0:10/10)将生成10阶灰度色。
举个例子:
> n<-10
> mycolors<-rainbow(n)
> pie(rep(1,n),labels=mycolors,col=mycolors,main="饼图的颜色" )
> mygrays<-gray(0:n/n)
> pie(rep(1,n),labels=mygrays,col=mygrays,main="饼图的颜色")



2.3 文本属性
图形参数同样可以用来指定字号、字体和字样,下图是用于控制文本大小的参数。字体族和字样可以通过字体选项进行控制。






举个例子:
> par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)
> plot(dose,drugA,type = 'b')
下图是前后设置参数的对比



还可以设置字体样式family:
par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2,family='mono')


如果不想用提供的默认字样,可以自己设置字样:
> windowsFonts(
A=windowsFont("Arial Black"),
B=windowsFont("Bookman Old Style"),
C=windowsFont("Comic Sans MS")
)
> par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2,family='C')
> plot(dose,drugA,type = 'b')



2.4 图形尺寸与边界尺寸
可以使用以下列出的参数来控制图形尺寸和边界大小。


举个例子:
>opar<-par(no.readonly = TRUE)
> par(pin=c(2,3))
> par(lwd=2,cex=1.5)
> par(cex.axis=.75,font.axis=3)
> plot(dose,drugA,type = 'b',pch=19,lty=2,col="red")
>par(opar)
>dev.new()
>opar<-par(no.readonly = TRUE)
> par(pin=c(2,3))
> par(lwd=2,cex=1.5)
> par(cex.axis=.75,font.axis=3)
> plot(dose,drugB,type = 'b',pch=23,lty=6,col="blue" bg=”green”)
>par(opar)



> par(pin=c(4,3),mai=c(1,.5,1,.2))
> plot(dose,drugA,type = 'b',pch=19,lty=2,col="red")


3、添加文本、自定义坐标轴和图例
除了图形参数,许多高级绘图函数(例如plot、hist、boxplot)也允许自行设定坐标轴和文本标注选项。举例来说,以下代码在图形上添加了标题(main)、副标题(sub)、坐标轴标签(xlab、ylab)并指定了坐标轴范围(xlim、ylim)
代码如下:
> plot(dose,drugA,type = 'b',col="red",lty=2,pch=2,lwd=2,main="Clincal Trials for DrugA",sub="This is hypothetical data",xlab="Dosage",ylab = "Drug Response", xlim = c(1,60),ylim = c(0,70))


3.1 标题
可以使用title()函数为图形添加标题和坐标轴标签,调用格式:



函数title()中亦可指定其他图形参数(如文本大小、字体、旋转角度和颜色)。举例来说,以下代码将生成红色的标题和蓝色的副标题,以及较默认大小小25%的绿色x轴、y轴标签:
> plot(dose,drugA,type='b',xlab = "",ylab = "")
> title(main="My Title",col.main="red",sub="My Sub-title",col.sub="blue",xlab = "My X label",ylab = "My  Y label",col.lab="green",cex.lab=0.75)


3.2 坐标轴
你可以使用函数axis()来创建自定义的坐标轴,而非使用R中的默认坐标轴。其格式为:




创建自定义坐标轴时,你应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴(包括坐标轴框架线,除非你添加了参数frame.plot=TRUE)。参数xaxt="n"和yaxt="n"将分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
举个例子:
> 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)
#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)


3.3 参考线
函数abline()可以用来为图形添加参考线。其使用格式为:


函数abline()中也可以指定其他图形参数(如线条类型、颜色和宽度)。举例来说:


在y为1、5、7的位置添加了水平实线,而代码:


则在x为1、3、5、7、9的位置添加了垂直的蓝色虚线。
举个例子:
> plot(dose,drugA,type = 'b')> abline(h=c(20,40,60))> abline(v=c(30,40,50),lty=2,col="blue")


3.4 图例
当图形中包含的数据不止一组时,图例可以帮助你辨别出每个条形、扇形区域或折线各代表哪一类数据。我们可以使用函数legend()来添加图例。




其他常用的图例选项包括用于指定盒子样式的bty、指定背景色的bg、指定大小的cex,以及指定文本颜色的text.col。指定horiz=TRUE将会水平放置图例,而不是垂直放置。
举个例子:
> par(opar)
> 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(lattice)
> library(survival)
> library(Formula)
> library(ggplot2)
> 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)


3.5 文本标注
我们可以通过函数text()和mtext()将文本添加到图形上。text()可向绘图区域内部添加文本,而mtext()则向图形的四个边界之一添加文本。使用格式分别为:




其他常用的选项有cex、col和font(分别用来调整字号、颜色和字体样式)。
除了用来添加文本标注以外,text()函数也通常用来标示图形中的点。我们只需指定一系列的x, y坐标作为位置参数,同时以向量的形式指定要放置的文本。x、y和文本标签向量的长度应当相同。
举例1:
> 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)


举例2:
opar<-par(no.readonly = TRUE)
par(cex=1.5)
plot(1:7,1:7,type = "n")
text(3,3,"Example of default text")
text(4,4,family="mono","Example of mono-spaced text")
text(5,5,family="serif","Example of serif text")


4、图形的组合
你可以在par()函数中使用图形参数mfrow=c(nrows, ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。另外,可以使用nfcol=c(nrows, ncols)按列填充矩阵。
举个例子:
> 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是一个矩阵,它指定了所要组合的多个图形的所在位置。
举个例子:
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
函数layout中mat矩阵是如何确定图形位置排布的?
mat内的每个元素根据他们的行列序号对应一个格子。而元素本身的值代表它属于第几个figure,




为了更精确地控制每幅图形的大小,可以有选择地在layout()函数中使用widths=和heights=两个参数。其形式为:
widths = 各列宽度值组成的一个向量
heights = 各行高度值组成的一个向量
相对宽度可以直接通过数值指定,绝对宽度(以厘米为单位)可以通过函数lcm()来指定。
我们再次将一幅图形置于第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)



图形布局的精细控制
可能有很多时候,你想通过排布或叠加若干图形来创建单幅的、有意义的图形,这需要有对图形布局的精细控制能力。你可以使用图形参数fig=完成这个任务。通过在散点图上添加两幅箱线图,创建了单幅的增强型图形。
代码如下:
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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-11-22 08:33 | 显示全部楼层
no.readon=T可编辑项
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-25 13:12 , Processed in 0.123502 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表