之前基本上没画过坐标中断的图。临时有需求,因而网上大量搜索。html
最后仍是在 plotrix
包里的 gap.barplot
函数基础上画的。express
主要参考了:ide
barplot()
和 axis.break
实现某些图。等。函数
另外此篇:How to make a bar graph with a split Y axis in R 可参考,彷佛是本身实现,我还没看。.net
须要加载 plotrix
包。code
断层以上部分缩减比例,好比 20 倍,此处设置断层起止为 0.55 到 0.6。htm
# 要本身看如何调节比例合适 # 主要是矩阵第 2 行的数据有些比较大,而第一行的数据都相对较小 tmp.t[2,tmp.t[2, ] > 0.6] = (tmp.t[2,tmp.t[2, ] > 0.6] - 0.6) / 20 + 0.6
由于 gap.barplot
目前blog
doesn't do grouped bars (yet)ci
因此添加一行 NA
来达成效果get
tmp.t = rbind(tmp.t, NA)
借助 sub()
为不一样类别添上不一样颜色
# SF 承载了类别信息 col.tmp = tmp$SF col.tmp = sub("hehe","red", col.tmp)
做图关键函数调用
gap.barplot( tmp.t, # 数据矩阵 gap = c(0.55,0.6), # 断点——断层之起止 col=rep(c("black","grey","white"),dim(tmp.t)[2]), # 不一样行不一样颜色,NA 行为白色(背景色) xaxt="n", las=1, # 使 y 轴坐标水平而非竖直 # 下面这种用法请查阅 ?plotmath # 亲测空格不能省略,由于我没仔细看手册,只能凭经验这么说了 ylab = expression(paste(plain("hehe "), italic("i"), plain("xixixi"))), xlab = "", # 不要 x 轴标签 ytics = c(0,0.1,0.2,0.3,0.4,0.5), # 指定画哪些刻度线 ylim = c(0,0.83) # 指定 y 轴起止 ) # 再为断层以上添加两个刻度 axis(2,at=c(0.7-0.05,0.8-0.05),labels = c((0.7-0.6)*20+0.6,(0.8-0.6)*20+0.6),las=1)
修改 gap
# 糗世界用的是 snow,颜色太浅了,这里改为了一种灰色 axis.break(2,0.55,breakcol = "#AFAEAF", style = "gap") axis.break(2,0.55*(1+0.02),breakcol="black",style="slash") axis.break(4,0.55*(1+0.02),breakcol="black",style="slash")
习惯用这种手法来添加标签,目前不知道更好的办法。
for (i in 1:dim(tmp.t)[2]) { axis(side=1, at=1.5+3*(i-1),labels = tmp$F[i], tick = FALSE, las=2, cex=0.8, col.axis=col.tmp[i]) # line = ? 须要本身看状况调节 axis(side = 1, at = 1.5+3*(i-1), labels = sf[i], tick = FALSE, cex.axis=0.8, line=4, col.axis=col.tmp[i]) }
添加一些 tick
# tcl 可查阅 ?par,控制 tick 的长度 axis(side = 1, at = seq(0,3*dim(tmp.t)[2],3), labels = FALSE, tick=TRUE, tcl = -6, col.ticks="#AFAEAF")
关于对齐:?par
,看 adj