关闭

R语言基本绘图参数

标签: r语言
96人阅读 评论(0) 收藏 举报
分类:

聊一聊R的基本绘图参数

2016-03-13 砍柴问樵夫

R语言除了具有优秀的数据处理能力外,对于数据的展现也具有极其灵活和强大的作用。

R语言绘图函数主要包括:低级绘图函数,高级绘图函数,扩展绘图包函数。


工欲善其事,必先利其器。要想绘制一副精美的图形,必须掌握R中的基本绘图参数。

我们浏览一下R语言中的基本图形参数。



pch:点的符号,指定绘制点时使用的符号。

x<-rep(1:5,times=6)
y<-rep(1:6,each=5)
plot(0,type="n",xlim=c(1,6),ylim=c(7,1),axes=F,main='pch取值',xlab='',ylab='')
for(i in 0:25){
  if(i > 20){
   points(x[i+1],y[i+1],pch=i,bg="red")
  } else {
    points(x[i+1],y[i+1],pch=i)
  }
  text(x[i+1]+0.4,y[i+1],labels = paste('pch=',i),cex=0.8)
}


对于符号21:25,你还可以指定边界的颜色(col=)和填充颜色(bg=)。

另外,pch还可以取值: *  . 。 +  -  |  o  等,读者自己尝试一下。


cex:指定符号的大小,一般cex 是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小50%。

plot(0,type="n",xlim=c(1,6),ylim=c(6,1),axes=F,
     main='cex缩放倍数',xlab='',ylab='')
text(x=1,y=1,labels = "cex=0.5",cex=.5)
text(x=2,y=2,labels = "cex=0.8",cex=.8)
text(x=3,y=3,labels = "cex=1",cex=1)
text(x=4,y=4,labels = "cex=1.2",cex=1.2)
text(x=5,y=5,labels = "cex=1.5",cex=1.5)



lty:指定线条类型,主要包括实线、虚线、点线、点划线等7种样式

plot(0,type="n",xlim=c(0,6),ylim=c(6,0),axes=F,
     main='lty类型',xlab='',ylab='')
for ( i in 0:6){
  abline(h = i,lty=i)
  text(x=0.1,y=i-0.1,labels = paste('lty=',i))
}



lwd:线条宽度,lwd是以默认值的相对大小来表示的(默认值为1)

plot(0,type="n",xlim=c(0,6),ylim=c(6,0),axes=F,
     main='lwd宽度',xlab='',ylab='')
lines(1:5,rep(1,5),lwd=0.5);text(0.5,1,labels = paste("lwd=",0.5))
lines(1:5,rep(2,5),lwd=1 );text(0.5,2,labels = paste("lwd=",1))
lines(1:5,rep(3,5),lwd=2 );text(0.5,3,labels = paste("lwd=",1.5))
lines(1:5,rep(4,5),lwd=3 );text(0.5,4,labels = paste("lwd=",2))


颜色(比较重要)

col:默认颜色向量自动循环使用

col.axis:坐标轴刻度文字的颜色

col.lab:坐标轴标签大的颜色

col.main:标题的颜色

col.sub:副标题的颜色

fg:前景色

bg:背景色

R语言默认提供了自带的固定种类的颜色。

colors()提供了657种颜色

读者可以自行选取想要的颜色

colors()[grep('red',colors())] #查找含有‘red’字符的


我们也可以将657种颜色绘制出来

pdf('1.pdf',height=100)
par(mar=c(0,8,0,0))
barplot(rep(1,length(colors())),col=colors(),names.arg = colors(),horiz = T, las=1,xaxt='n')
dev.off()

现将部分颜色展示如下:


R中也提供了特定颜色主题的配色方案

rainbow():彩虹的颜色

heatcolors():从红色到黄色再到白色

terrain.colors():从绿色到黄色再到棕色最后到白色

topo.colors():从蓝色到青色再到黄色最后到棕色

cm.colors():从青色到白色再到粉红色

par(mfrow=c(5,1),xaxs='i',yaxs='i',mar=c(0.1,0.1,2,0.1))
n<-1000
barplot(rep(1,n),col=rainbow(n),border=rainbow(n),axes=F,main="Rainbow()")
barplot(rep(1,n),col=heat.colors(n),border=heat.colors(n),axes=F,main="heat.colors()")
barplot(rep(1,n),col=terrain.colors(n),border=terrain.colors(n),axes=F,main="terrain.colors()")
barplot(rep(1,n),col=topo.colors(n),border=topo.colors(n),axes=F,main="topo.colors()")
barplot(rep(1,n),col=cm.colors(n),border=cm.colors(n),axes=F,main="cm.colors()")


此外,RcolorBrewer颜色扩展包提供了三套很好的配色方案

连续型:Sequential,通常用来标记数值的大小

极端型:生成用深色强调两端,浅色标识中部的系列颜色,用来标记数据中的离群点

离散型:生成一系列彼此差异比较明显的颜色,用来标记分类数据。

library(RColorBrewer)
display.brewer.all(type="seq") #连续型
display.brewer.all(type="div") #极端性
display.brewer.all(type="qual")#离散型
display.brewer.all()           #三种类型全部输出

读者可以尝试分表输出三种类型

文本属性:文本大小和字体


文本大小

cex:默认值为1

cex.axis:坐标轴刻度文字缩放倍数

cex.lab:坐标轴标签缩放倍数

cex.mian:标题缩放倍数

cex.sub:副标题缩放倍数

字体

font:一般用1,2,3,4,代表正常体,粗体,斜体,粗斜体

font.axis:坐标轴刻度字体样式

font.lab:坐标轴标签字体样式

font.main:标题字体样式

font.sub:副标题字体样式

ps:字体磅值

family:绘制文本时使用的字体族(serif:衬线,sans:无衬线,mono:等宽)


在window系统中,我们可以查看family的具体映射:


如果以pdf输出图形的话,可以利用函数查看在你的系统中有哪些字体可用


查看font类型:

plot(0:5,0:5,type="n",xlab = '',ylab = '',axes = F,main="font类型")
text(1,1,labels = "font=1",font=1,cex=2)
text(2,2,labels = "font=2",font=2,cex=2)
text(3,3,labels = "font=3",font=3,cex=2)
text(4,4,labels = "font=4",font=4,cex=2)


图形尺寸和边界尺寸

pin:以英寸表示的图形尺寸(宽和高)

mai:以数值向量表示的边界大小(顺序是下左上右)

mar:以数值向量表示的边界大小(顺序是下左上右),默认值是c(5,4,4,2)+0.1


坐标轴

语法规则:axis(side = ,at = ,labels = ,tick = ,line = ,pos = ,outer = ,font = ,lty = ,... = )

参数 描述
side 一个整数,(1=下,2=左,3=上,4=右)
at 一个数值型向量,表示需要绘制刻度线的位置
labels 一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值)
pos 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
las 标签是否平行于(=0)或垂直于(=2)坐标轴

tck

刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制网格线);默认值为-0.01

边框

bty参数可以设置图形边框样式,取值为 o,l,7,c,u,j

par(mfrow=c(2,3))
for(i in c('o','l','u','7','c',']')){
  plot(1:10,1:10,axes=T,xlab='',ylab='',bty=i,main=paste("bty=",i))
}

当然box()函数同样可以设置各边框的线条样式


参考线

语法规则:abline(a = ,b = ,h = ,v = ,reg = ,coef = ,untf = ,... = )

a、b:截距和斜率

h、v:水平线和垂直线

coef:回归系数,提供给a、b值


网格线

语法规则:grid(nx = ,ny = ,col = ,lty = ,lwd = ,equilogs = )

nx:设置垂直网格线数目

ny:设置水平网格线数目


线段

segments()函数

语法规则:segments(x0 = ,y0 = ,x1 = ,y1 = ,col = ,lty = ,lwd = ,... = )

x0和y0表示线段的起始点,

x1和y1表示线段的终点坐标


箭头

语法规则:arrows(x0 = ,y0 = ,x1 = ,y1 = ,length = ,angle = ,code = ,col = ,lty = ,lwd = ,... = )

x0、y0、x1、y1代表绘制的起始和终点坐标

length:箭头边缘的长度

angle:箭头角度

code:在起点还是终点或者两者都绘制箭头(0:不绘制,1:起点,2:终点,3:两端)

plot(1:10,1:10,axes=F,xlab='',ylab='',type="n")
arrows(1,1,8,1,angle=90,length = 0.1,code = 0);text(9,1,'angle=90')
arrows(1,3,8,3,angle=60,length = 0.1,code = 1);text(9,3,'angle=60')
arrows(1,5,8,5,angle=45,length = 0.1,code = 2);text(9,5,'angle=45')
arrows(1,7,8,7,angle=30,length = 0.1,code =3);text(9,7,'angle=30')
arrows(1,9,8,9,angle=0, length = 0.1,code = 1);text(9,9,'angle=0')


type样式

在低级绘图函数中type有9中类型

par(mfrow=c(3,3))
for(i in c('p','l','b','c','o','h','s','S','n')){
  plot(1:10,1:10,axes=T,xlab='',ylab='',type=i,main=paste("type=",i))
}



图形布局

par函数和layout函数

par中图形参数mfrow=c(nrow,ncol)


layout函数更加灵活,多样。

语法规则:layout(mat = ,widths = ,heights = ,respect = )

mat自定义的矩阵

widths:各列宽组成的向量

heights:各行高度值组成的一个向量

respect:逻辑值或者是一个矩阵对象

mat<-matrix(c(1,1,4,2,3,4),nrow = 2,byrow = T)
layout(mat,widths=c(1,1,2),heights = c(1,1))
attach(mtcars)
hist(mpg,main='')#高:50%,宽:50%
hist(mpg,main='')#高:50%,宽:25%
hist(mpg,main='')#高:50%,宽:25%
hist(mpg,main='')#高:100%,宽:50%

detach(mtcars)


若你想要精细布局你的图形,你还可以借助于fig函数

首先我们要知道一副图形,它的左下角对应的是c(0,0),右上角为c(1,1)

fig(x1,x2,y1,y2),x1,x2横向坐标占据空间范围,y1,y2纵向坐标范围。

opar<-par(no.readonly = T)
par(fig=c(0,0.8,0.2,1))
attach(mtcars)
plot(mpg~wt,xlab='')
par(fig=c(0,0.8,0,0.45),new=T)
boxplot(wt,horizontal = T)
par(fig=c(0.7,1,0,1),new=T)
boxplot(mpg)
par(opar)
detach(mtcars)


R的基本绘图参数还有很多,若读者感兴趣,可以参考par函数中的内容。可以说你的par函数掌握的怎么样,就决定着你的R语言基本绘图能力如何。


参考书籍:R语言实战、R语言与网站分析

          



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:115次
    • 积分:16
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档