Rather than specifying an orientation, compute the layout in normalized space. In a future change, I'd also like to clean up the temporary state that is stored on tree nodes, and record dx and dy attributes per node that could be used to compute a space-filling layout.
We were computing the tick join based on the (new) format function, but doesn't produce the desired effect: the new format is applied on the old data. Thus, the wrong join occurs if, say, the value 0.5 with the new format results in "0". The correct join compares the old text content to the new format value.
Rather sharing the x-scale across bullet multiples, compute a separate scale per multiple. This gives the user more control over the scale: by setting the range values across multiples (in data), the user can precisely control the resulting scales. For transitions, we cache the old scale value in a hidden __chart__ attribute. This is a bit of a hack (it might be cleaner to persist it in the data of a child element), but it might provide a sticky way for charts to communicate with each other in the future, say for performing transitions across chart types.
This example shows how to preserve scales across multiples using a single chart instance, as opposed to bullet-multiples which uses distinct chart instances to supply separate scales. I still think it'd be better to use a single chart instance in both cases, but then I need a different place to hide the scale state.