   # cool but not flexible enough
   Node: class extends Backbone.Model
     width: 20
-    horizontal_spacing: 170
     vertical_margin: 10
 
     initialize: =>
       @right_links = []
       @left_links = []
       @view = @get 'view'
+
+    # Returns an appropriate spacing given the number of columns. Some values
+    # are manually set to squeeze every single pixel
+    #
+    horizontal_spacing: =>
+      return @__horizontal_spacing if @__horizontal_spacing?
+      cols = @view.number_of_columns()
+      @__horizontal_spacing = switch cols
+        when 3 then 170
+        when 4 then 120
+        else @view.width / cols
+      @__horizontal_spacing
 
     # vertical position of the top left corner of the node. Adds some margin
     # between nodes

        offset += n.value() + margin
      offset

    x_offset: => @get('column') * (@width + @horizontal_spacing)

    # center point of the node. We use it as link anchor point
    x_center: => @x_offset() + @width / 2

        node = new D3.sankey.Node(_.extend n, view: this)
        @node_map[n.id] = node
        node

      @link_list = _.map D3.sankey.charts[k].data.links, (l) =>
        new D3.sankey.Link(_.extend l, view: this)
      @initialize_defaults()
