I would call this "proof of concept" at best. The x axis labels can be adjusted with scale_x_continuous, I think.
library(tibble)
library(ggplot2)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df <- tribble(
~loc, ~time, ~value,
"a", "t1", 4,
"a", "t2", 6,
"a", "t3", 7,
"b", "t1", 2,
"b", "t2", 4,
"b", "t3", 8,
"c", "t1", 6,
"c", "t2", 4,
"c", "t3", 2)
df <- df %>% mutate(locInt = case_when(loc == "a" ~ 1,
loc == "b" ~ 2,
loc == "c" ~ 3),
locFine = case_when(time == "t1" ~ locInt - 0.2,
time == "t2" ~ locInt,
time == "t3" ~ locInt + 0.3))
df %>% filter(time %in% c("t1", "t2")) %>%
ggplot(aes(x = locFine, y = value, fill = time)) +
geom_col(position = position_identity(), orientation = "x", width = 0.2) +
geom_col(data = filter(df, time == "t3"), orientation = "x", width = 0.4)

Created on 2020-05-26 by the reprex package (v0.3.0)