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)