The following plots use manually determined gap sequences. A general algorithm would be nice.

Generated within RStudio using R Markdown and ggvis.

dat1 <-
  structure(c(1, 1, 1, 1, 1, 8, 8, 8, 8, 2, 1, 1, 1, 1, 8, 8, 8, 
  7, 2, 2, 1, 1, 1, 8, 8, 7, 7, 2, 2, 2, 1, 1, 8, 7, 7, 7, 2, 2, 
  2, 2, 1, 7, 7, 7, 7, 3, 3, 3, 3, 4, 6, 6, 6, 6, 3, 3, 3, 4, 4, 
  5, 6, 6, 6, 3, 3, 4, 4, 4, 5, 5, 6, 6, 3, 4, 4, 4, 4, 5, 5, 5, 
  6), .Dim = c(9L, 9L), .Dimnames = structure(list(Y = c("1", "2", 
  "3", "4", "5", "6", "7", "8", "9"), X = c("1", "2", "3", "4", 
  "5", "6", "7", "8", "9")), .Names = c("Y", "X")))
dat2 <-
  structure(c(1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 2, 1, 1, 1, 1, 8, 8, 
  8, 8, 7, 2, 2, 1, 1, 1, 8, 8, 8, 7, 7, 2, 2, 2, 1, 1, 8, 8, 7, 
  7, 7, 2, 2, 2, 2, 1, 8, 7, 7, 7, 7, 3, 3, 3, 3, 3, 6, 6, 6, 6, 
  6, 3, 3, 3, 3, 4, 5, 6, 6, 6, 6, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 
  3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6), .Dim = c(10L, 
  10L), .Dimnames = structure(list(X = c("1", "2", "3", "4", "5", 
  "6", "7", "8", "9", "10"), Y = c("1", "2", "3", "4", "5", "6", 
  "7", "8", "9", "10")), .Names = c("Y", "X")))
dat3 <-
  structure(c(13, 1, 1, 1, 9, 2, 2, 2, 16, 5, 13, 1, 1, 9, 2, 2, 
  16, 6, 5, 5, 13, 1, 9, 2, 16, 6, 6, 5, 5, 5, 13, 9, 16, 6, 6, 
  6, 11, 11, 11, 11, 17, 12, 12, 12, 12, 7, 7, 7, 15, 10, 14, 8, 
  8, 8, 7, 7, 15, 3, 10, 4, 14, 8, 8, 7, 15, 3, 3, 10, 4, 4, 14, 
  8, 15, 3, 3, 3, 10, 4, 4, 4, 14), .Dim = c(9L, 9L), .Dimnames = structure(list(
  X = c("1", "2", "3", "4", "5", "6", "7", "8", "9"), Y = c("1", 
  "2", "3", "4", "5", "6", "7", "8", "9")), .Names = c("Y", 
  "X")))
dat4 <-
  structure(c(13, 1, 1, 1, 1, 2, 2, 2, 2, 16, 5, 13, 1, 1, 1, 2, 
  2, 2, 16, 6, 5, 5, 13, 1, 1, 2, 2, 16, 6, 6, 5, 5, 5, 13, 1, 
  2, 16, 6, 6, 6, 5, 5, 5, 5, 13, 16, 6, 6, 6, 6, 7, 7, 7, 7, 15, 
  14, 8, 8, 8, 8, 7, 7, 7, 15, 3, 4, 14, 8, 8, 8, 7, 7, 15, 3, 
  3, 4, 4, 14, 8, 8, 7, 15, 3, 3, 3, 4, 4, 4, 14, 8, 15, 3, 3, 
  3, 3, 4, 4, 4, 4, 14), .Dim = c(10L, 10L), .Dimnames = structure(list(
  Y = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), 
  X = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")), .Names = c("Y", 
  "X")))
dat4.groups <-
  structure(c(2L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 4L, 7L, 2L, 1L, 
  1L, 1L, 3L, 3L, 3L, 4L, 8L, 7L, 7L, 2L, 1L, 1L, 3L, 3L, 4L, 8L, 
  8L, 7L, 7L, 7L, 2L, 1L, 3L, 4L, 8L, 8L, 8L, 7L, 7L, 7L, 7L, 2L, 
  4L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 10L, 12L, 11L, 11L, 11L, 
  11L, 9L, 9L, 9L, 10L, 5L, 6L, 12L, 11L, 11L, 11L, 9L, 9L, 10L, 
  5L, 5L, 6L, 6L, 12L, 11L, 11L, 9L, 10L, 5L, 5L, 5L, 6L, 6L, 6L, 
  12L, 11L, 10L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 12L), .Label = c("a", 
  "a\\e", "b", "b/f", "c", "d", "e", "f", "g", "g/c", "h", "h\\d"
  ), class = "factor")

png files:


svg files: