R语言与医学统计图形【6】低级绘图函数

R语言基础绘图系统

基础绘图包之低级绘图函数——定义坐标轴、图例、文本

低级绘图函数:本身不具备图形绘制能力,只是在已有图形基础上添加元素。

函数 功能
arrows 添加箭头
axis 坐标轴
box 图形边框
abline 添加直线
clip 修剪图形
locator 识别图中点的坐标
layout 切分画布
legend 添加图例
lines 添加线条
segments 添加线段
rug 添加小地毯
polygon 构建多边形
points 添加散点
titles 添加标题
text 添加文字
mtext 在图形四周添加文字
grid 添加背景网格线

1.自定义坐标轴及文本

N <- 200
x <- seq(-4,4,length=N)
y1 <- sin(x)
y2 <- cos(x)

op <- par(mar=c(5,4,4,4))
xlim <- range(x) #返回最大值和最小值
ylim <- c(-1.1,1.1)
plot(x,y1,col='blue',type='l',
     xlim = xlim,ylim=ylim,
     axes=F, #先不画坐标
     xlab = '',ylab = '',main = 'title')
axis(1)
#axis中1,2,3,4分别表示下,左,上,右坐标
axis(2,col = 'blue')

par(new=T) #在刚绘好的图上添加新图
plot(x,y2,col='red',type='l',
     xlim=xlim,ylim=ylim,
     axes = F,xlab = '',ylab = '',main = '')
axis(4,col = 'red')
#添加边缘文字
mtext('first Y axis',2,line = 2,col = 'blue',cex = 1.2)
#mtext第二个参数1,2,3,4也是表下左上右
mtext('second Y axis',4,line = 2,col = 'red',cex=1.2)

image.png
自定义不同的纵坐标。


plot(rnorm(100),axes = F,col='orange',pch=16,
     ylab = 'scatter points',xlab = 'x axis',
     ylim = c(-3.5,3.5))
#par函数中xaxt/yaxt设为n,表示不绘制坐标轴刻度和标签,但仍有一条坐标轴线
#这和axes稍有不同

axis(1,at=seq(0,100,10), #定义刻度线位置
     labels = LETTERS[1:11],
     col = 'red',lwd = 1.3, #坐标轴颜色
     col.ticks = 'pink') #刻度颜色

axis(2,at=seq(-3,3,1),col = 'blue',
     col.ticks = 'sky blue',lwd = 1.3)
#当自定义的坐标轴不能完全显示时(画布太小),可设置xlim/ylim解决

abline(h=0, #y轴为0的水平线
       col='red',lwd=2,lty=2)

curve(sin, 
      0,100, #from...to...
      add = T) #添加到现有图形

image.png

2.图例


a=c(1:5)
b=c(2,3,3,4,5)
c=c(4,5,2,3,1)

plot(b~a,type='b',bty='l',
     xlab='value of a',ylab='value of b',
     col='red',lwd=3,pch=17,ylim=c(1,5))
lines(c~a,col='blue',lwd=3,pch=19,type='b')

legend(#'bottomleft', #位置参数:字符串 topright
       3,5, #位置参数:坐标位置
       legend=c('Group 1',"Group 2"), #图例标签
       col = c('red','blue'), #图例填充色
       pch=c(17,19), #图标形状
       bty='n', #定义边框,n不要
       pt.cex = 2, #图标大小
       cex = 1.2, #标签文字大小
       text.col = 'black', #标签文字颜色
       horiz = F, #是否水平放置,默认F(垂直)
       inset = c(0.1,0.1),#距离x、y轴程度,0-1
       x.intersp = 0.1, #水平图标间距
       y.intersp = 0.4) #竖直图标间距
#后两个参数对于图形中图例非常多时很有用

image.png

plot(iris$Sepal.Length~iris$Sepal.Width,
     pch=c(21:23)[iris$Species], 
     #三种不同点型对应三个不同品种
     col=c('orange','sky blue','pink')[iris$Species],
     bg=c('orange','sky blue','pink')[iris$Species])

legend( #x=3.7,y=8.0, #坐标法
        locator(1), #去图上找一个合适位置,左击鼠标
       legend = c('Setosa','Versicolor','Virginica'),
       col=c('orange','sky blue','pink'),
       pch = 21:23,
       pt.cex = 2,
       y.intersp = 0.8, #图例间距
       pt.bg = c('orange','sky blue','pink'))

image.png

3. 添加文本

x <- rnorm(1000)
hist(x,xlim = c(-4,4))
usr <- par('usr') #为找到画布四个角的坐标,左下角/右下角/左上角/右下角
clip(usr[1],-1,usr[3],usr[4])
#切割画布
hist(x,col = 'red',add=T)
text(-3,50,labels = 'red area',
     col = 'red',srt=60,cex=2)

#切割另一个矩形
clip(1,usr[2],usr[3],usr[4])
hist(x,col = 'blue',add=T)
text(x=3,y=50,labels = 'blue area',
     col='blue',srt=300,cex=2)

image.png
示例2.

data <- sample(20:80,20)
par(mar=c(4,3,3,1))
barcenter <- barplot(data,col='skyblue',axes = F,
                     ylim = c(-5,100)) #限定y轴范围,为了使后面文本显示出来
#存储了条柱中心横坐标
axis(2,at=seq(0,100,10))
text(barcenter,-2,labels = LETTERS[1:20],
     col = 'red',cex = 0.8)

image.png

示例3.

mycars <- data.frame(car=c('Honda','Benz','BMW',
                           'Audi','Chery','Toyota','Ford'),
                     mtg=c(4,5.2,5.5,2.8,1.8,2.8,3))
plot(mycars$mtg,cex=mycars$mtg,col='pink',pch=21,
     bg='lightblue',ylab='cars\' mtg',xlab='cars',
     xlim = c(0,7.5))
text(1:7,mycars$mtg,labels = mycars$car)

image.png

posted @ 2020-02-07 17:00  生物信息与育种  阅读(762)  评论(0编辑  收藏  举报