Something like this?
f = Figure()
ax = Axis(f[1, 1], width = 800, height = 200)
groups = 61:83
n_per_group = 4
bits = rand(n_per_group, length(groups))
bits_accum = cumsum(sort!(bits, dims = 1), dims = 1)
midpoints = (vcat(zeros(length(groups))', bits_accum[1:end-1, :]) .+ bits_accum) .* 0.5
letters = rand('A':'Z', n_per_group, length(groups))
colors = rand(RGBf, n_per_group * length(groups))
scatter!(ax, repeat(groups, inner = n_per_group), vec(midpoints), marker = Rect, markerspace = :data,
markersize = Vec.(1, vec(bits)), color = tuple.(colors, 0.2),
)
scatter!(ax, repeat(groups, inner = n_per_group), vec(midpoints), marker = vec(letters), markerspace = :data,
markersize = Vec.(1, 1.33 .* vec(bits)), color = colors,
font = "TeX Gyre Heros Makie Bold",
)
resize_to_layout!(f)
f
I had to add a manual factor stretching the markers a bit more in y direction so that they touch, that depends on the font’s metrics. I added the rectangles for comparison which aren’t stretched, so you know that the y heights of the letters are correct this way.