当我们想同时展示两种数据,如销售量(千/月)和增长率(百分比)的变化情况,由于两组数据的数量级差别非常大,如果在一个y轴上展示则较小数量级的一组几乎无波动变化,此时可以绘制双坐标轴的图形,设置两个y轴,每个y轴都有自己的刻度范围,数据的波动就更加一目了然啦!
R语言plotrix包,可以帮助我们实现双坐标轴图形的绘制。
以7名患者的DNA测序的质控信息为例,绘制靶向捕获测序深度和重复率的关系:
代码语言:javascript复制#load plotrix
library(plotrix)
#Data preparation
ID=1:7
PID=paste("P",1:7,sep = "_")
Depth=seq(from=2000,to=800,by=-200)
DupRatio=c(0.31,0.45,0.37,0.64,0.35,0.56,0.42)
Data=data.frame(ID=ID,PID=PID,Depth=Depth, DupRatio= DupRatio)
#Plot
twoord.plot(lx =Data$ID, ly = Data$Depth, rx = Data$ID, ry = Data$DupRatio, lcol = 'steelblue', main = '整数和小数的双轴图', xlab = '患者编号', ylab = '测序深度x(绝对数值)', rylab = '重复率(0-1之间的小数)', type = c('bar','l'), xtickpos=as.numeric(Data$ID), xticklab = as.character(Data$PID))
细说twoord.plot():
代码语言:javascript复制 #函数用法:
twoord.plot(lx,ly,rx,ry,data=NULL,main="",xlim=NULL,lylim=NULL,rylim=NULL,
mar=c(5,4,4,4),lcol=1,rcol=2,xlab="",lytickpos=NA,ylab="",ylab.at=NA,
rytickpos=NA,rylab="",rylab.at=NA,lpch=1,rpch=2,
type="b",xtickpos=NULL,xticklab=NULL,halfwidth=0.4,axislab.cex=1,
do.first=NULL,...)
代码语言:javascript复制#参数详情
lx,ly,rx,ry:依次指第一组数据横坐标、该数据(左侧)纵坐标,第二组数据横坐标、该数据(右侧)纵坐标的值,注意必须是连续的值。
data:待绘制双轴图形的数据框
main:设置图形标题
xlim:限制横坐标值的范围
lylim,rylim:限制左、右纵坐标值的范围
mar:设置图形边界距,默认值为(5,4,4,4)
lcol,rcol:设置左右坐标轴的颜色,这样可以起到图例的作用
xlab:设置横坐标轴标签
lytickpos:设置左坐标轴刻度标签的位置
ylab:设置左坐标轴标签
ylab.at:设置左坐标轴标签位置
rytickpos:设置右坐标轴刻度标签的位置
rylab:设置右坐标轴标签
rylab.at:设置右坐标轴标签位置
lpch,rpch:设置左右坐标轴图形的外观
type:指定图形类型
xtickpos:设置横坐标轴刻度标签位置
xticklab:设置横坐标轴刻度标签
halfwidth:设置用户给定条形图宽度的一半
axislab.cex:设置坐标轴标签和刻度标签的大小
do.first:通过该参数可以往图形中添加背景色或网格