Tạo data
df <- data.frame(x = LETTERS[1:6], y = c(10, 15, 20, 910, 960, 1000), stringsAsFactors = F)
Cách 1 dùng gói plotrix
library(plotrix)
fr <- 25
to <- 890
yticks <- c(10, 20, 900, 950, 1000)
gap.barplot(df$y, gap = c(25, 890),
ytics = yticks, yaxlab = yticks,
xaxlab = df$x, col = rep("grey", 6))
axis.break(2, fr, breakcol = "snow", style = "gap")
axis.break(2, fr * 1.02, breakcol = "black", style = "slash")
axis.break(4, fr * 1.04, breakcol = "black", style = "slash")

Cách 2 thủ công
Đổi giá trị trục y
trans <- function(x, fr = 25) {
c(x[x < fr], fr + (0.05 * x[x > fr]))
}
(df$y_new <- trans(df$y, fr = 25))
## [1] 10.0 15.0 20.0 70.5 73.0 75.0
Dùng hàm barplot() kết hợp axis.break() của gói plotrix
yticks <- c(10, 20, 500, 750, 1000)
barplot(df$y_new, axes = F, names.arg = df$x, ylim = c(0,80))
box()
axis(side = 2, labels = yticks, at = trans(yticks))
axis.break(2, fr, breakcol = "snow", style = "gap")
axis.break(2, fr * 1.02, breakcol = "black", style = "slash")
axis.break(4, fr * 1.04, breakcol = "black", style = "slash")

Dùng ggplot2
library(ggplot2)
yticks <- c(0, 10, 20, 500, 700, 900, 1000)
ggplot(data = df, aes(x = x, y = y_new)) +
geom_bar(stat = "identity") +
geom_rect(aes(xmin = 0, xmax = 6.7, ymin = 25, ymax = 27), fill = "white") +
scale_y_continuous(limits = c(0, NA), breaks = trans(yticks), labels = yticks)
