Hi @kieroneil. You can do this by combining goem_tile and goem_text. If image needed, use goem_image from ggimage package. The following is a sample code for you. You can play with the parameters to adjust the outlook.
library(tidyverse)
df <- data.frame(value = sample(1:10000, 6), lab = LETTERS[1:6], image = "https://www.r-project.org/logo/Rlogo.png", stringsAsFactors = FALSE)
tile_width <- 0.8
tile_height <- 0.5
value_nudge_x <- 0.7
value_nudge_y <- 1.1
value_font_size <- 5
value_font_color <- "white"
lab_nudge_x <- 0.7
lab_nudge_y <- 0.9
lab_font_size <- 4
lab_font_color <- "white"
img_nudge_x <- 1.2
img_nudge_y <- 1
img_size <- 0.2
ggplot(df) +
geom_tile(aes(lab, 1, fill = lab), width = tile_width, height = tile_height) +
ggimage::geom_image(aes(seq(img_nudge_x, length(image) + img_nudge_x - 1, length.out = length(image)), img_nudge_y, image = image), size = img_size) +
geom_text(aes(seq(value_nudge_x, length(value) + value_nudge_x - 1, length.out = length(value)), value_nudge_y, label = value), color = value_font_color, size = value_font_size, hjust = 0) +
geom_text(aes(seq(lab_nudge_x, length(lab) + lab_nudge_x - 1, length.out = length(lab)), lab_nudge_y, label = lab), color = lab_font_color, size = lab_font_size, hjust = 0) +
coord_equal() +
theme(axis.text = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank()) +
guides(fill = FALSE) +
theme_void()

Created on 2020-02-27 by the reprex package (v0.3.0)