R繪圖-座標中斷的柱狀圖

之前基本上沒畫過座標中斷的圖。臨時有需求,因而網上大量搜索。html

最後仍是在 plotrix 包裏的 gap.barplot 函數基礎上畫的。express

主要參考了:ide

等。函數

另外此篇: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

  • 0 - 左對齊
  • 0.5 - 居中
  • 1 - 右對齊

卡的受不了了,不寫了。

相關文章
相關標籤/搜索