             @properties[name] = value
             addAccessor(this, name, value)
 
+        # Public data access by id
+        this.data_by_id = {}
+
+
+    columnVal: (id, col)->
+        geomap = this
+        if geomap.data_by_id[id]
+            geomap.properties.format(geomap.data_by_id[id][col])
+        else
+            'No data'
+
+
+    colorVal: (id, col)->
+        geomap = this
+        if geomap.data_by_id[id]
+            geomap.colorize(geomap.data_by_id[id][col])
+        else
+            '#eeeeee'
+
 
     draw: (selection, geomap)->
         geomap.private.data = selection.datum()

                min = val
            if max is null or val > max
                max = val
            data_by_id[d[unitId]] = val

        # Set private domain property to given domain or min, max, Must be set
        # on every update so data changes are reflected.

            .domain(geomap.private.domain)
            .range(geomap.properties.colors)

        geomap.selection.units.enter().append('path')
            .attr('class', 'unit')
            .attr('d', geomap.properties.path)
            .style('fill', (d)->
                geomap.colorVal(d.id, geomap.properties.column))
            .on('click', geomap.clicked.bind(geomap))
            .append('title')
                .text((d)->
                    d.properties.name + ': ' + geomap.columnVal(d.id, geomap.properties.column))

        if geomap.properties.legend
            geomap.drawLegend(min, max)
