> I tried using the scale transformation and this does indeed shrink the
> constituent parts (the US states) but leaves large gaps between each state
> because although they're smaller they stay in the same position.
Here is a way: first scale, then translate the path.
When raphaeljs scales, it does so that the BBox after is the same as
before. So to keep your map consistent, you can apply the following
code to each path that constitute your map:
var scaleFactor=...
// This will scale centered on the path BBbox center
p.scale(scaleFactor, scaleFactor);
// Tranlate the path so that the whole map is scaled.
var box = p.getBBox();
var x = box.x + box.width/2.0, y = box.y + box.height/
2.0;
var dx = x * scaleFactor - x, dy = y * scaleFactor-
y ;
p.translate(dx, dy);