Derived from the D3.js example force_cluster.html and gist 3104394.
As you can see: the visual behaviour is abominable; the quantization forces have to be minor to let the force layout work and they are simply too weak when it comes to manhandling the expanded groups into position.
Lesson learned: don’t do this at the same time, if you want it to work. Only when the force layout STOPS, MIGHT you be successful by then switching over to a ‘quantizing’ layout.
See the above hunch executed as gist 3118901 @ github.
grid quantization is based on the biggest node, so that each node is guaranteed to fit in a single slot (this limits your viable positions, and hence the maximum number of nodes you’ll be able to ‘safely’ fit in the given area, though!)
‘tick’ event does the magick: a node is ‘attracted’ by the EMPTY grid slot it is currently hovering over and REJECTED PERPENDICULAR TO THE DIRECTION IT CAME FROM when said slot is already occupied by another node; this happens on a first-come, first-serve basis, so nodes early in the nodes[] list get to be the choosers here.