Thanks etienne - I wasn’t familiar with the ‘base’ attribute, very helpful.
I suppose for datasets like mine (value pairs corresponding to upper and lower bounds), this means an extra step is required - set the lower values as the ‘base’ array, then calculate the size/width of each individual trace and set those values as the ‘x’ array. Hope this is helpful to anyone looking to create something similar.