四角形のセットは、次の入力/追加/終了/削除シーケンスで最初に描画されますが、問題ありません。別のデータを渡すと (既存のデータを完全に置き換えることを意味します)、新しい四角形が既存の四角形の上に描画されます。
妨げたくない他の長方形を描いたので、rect の代わりに「lgnds」を選択しています。
var svg = d3.select("#graph").append("svg")
elements = svg
.selectAll("lgnds")
.data(data, function(d){return d;});
elements
.enter()
.append("rect")
.attr("width", 15)
.attr("height", rectHeight)
.attr("x", 5)
.attr("y", function (d,i){return ((i*rectHeight)+(gap*(i+1)));})
.style("fill", function(d){ return d.color;});
elements
.exit()
.remove();