anchor.diff:          rect
              .attrFunc("height", (d,i) { return y(d["stack_start"]) - y(d["stack_end"]); });
         } else {
  -        rect
  -           .attrFunc("y", (d,i) { return y(d["value"]); });
  -        rect
  -           .attrFunc("height", (d,i) { return y(0) - y(d["value"]); });
  +        
  +        rect.attrFunc("y", (d, i) {
  +          if (d["value"] < 0) {
  +            return y(0);
  +          }
  +          return y(d["value"]);
  +        });
  +        rect.attrFunc("height", (d, i) {
  +          num h = y(0) - y(d["value"]);
  +          return h.abs();
  +        });
         }
         
         rect.style.fill = (Object d, int i) => "#${(color((d as Map)["y"]) as int).toRadixString(16)}";
  
positive.code:     g.attr("transform", "translate(${margin["left"]},${margin["top"]})");
      
      List last_series_total = [];
      for (int i = 0; i < _data.first.length; i += 1) {
        last_series_total.add(0);
      }
      int series_index = 0;
      for (List series in _data) {
        int i = 0;
        for (Map d in series) {
          num v = last_series_total[i];
          d['series_index'] = series_index;
          d['stack_start'] = v;
          v += d['value'];
          d['stack_end'] = v;
          last_series_total[i] = v;
          i += 1;
        }
        
        series_index += 1;
      }
      
  
negative.code:       var extents = extent(series, (d,i) {
          num v;
          if (is_stacked) {
            if (d["value"] >= 0) {
              v = d["stack_end"];
            } else {
              v = d["stack_start"];
            }
          } else {
            v = d["value"];
          }
  