R绘图-坐标中断的柱状图

以前基本上没画过坐标中断的图。临时有需求,于是网上大量搜索。

最后还是在 plotrix 包里的 gap.barplot 函数基础上画的。

主要参考了:

等。

另外此篇:How to make a bar graph with a split Y axis in R 可参考,似乎是自己实现,我还没看。


简单贴些代码自己注释下备忘。

需要加载 plotrix 包。

断层以上部分缩减比例,比如 20 倍,此处设置断层起止为 0.55 到 0.6。

# 要自己看如何调节比例合适
# 主要是矩阵第 2 行的数据有些比较大,而第一行的数据都相对较小
tmp.t[2,tmp.t[2, ] > 0.6] = (tmp.t[2,tmp.t[2, ] > 0.6] - 0.6) / 20 + 0.6

因为 gap.barplot 目前

doesn't do grouped bars (yet)

所以添加一行 NA 来达成效果

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

  • 0 - 左对齐
  • 0.5 - 居中
  • 1 - 右对齐

卡的受不了了,不写了。

转载于:https://my.oschina.net/u/727594/blog/532251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值