SVG では、DOM 要素はコード化された順序でレンダリングされ、z-index はサポートされていません。私はこのグラフを作成しました (スイムレーンに基づいています: http://bl.ocks.org/1962173 ) 単語が四角形で頻繁に覆われており、DOM を見ると、実際には多くの四角形がテキストの後にレンダリングされます。ただし、私のコードでは、テキストは明らかに最後に呼び出されます。これがvis liveです:
http://stanford.edu/~c0chran/cgi-bin/WordRiver/index.html
そして、すべての形状 (四角形/ラベル) をレンダリングするコード:
function display () {
var rects, labels
, minExtent = brush.extent()[0]
, maxExtent = brush.extent()[1];
var extentWidth = maxExtent - minExtent;
if (extentWidth > max_extent_width)
maxExtent = minExtent + max_extent_width;
if (extentWidth < min_extent_width)
maxExtent = minExtent + min_extent_width;
var visItems = jsonData.filter(function (d) {return d.time_bin <= maxExtent && d.time_bin >= minExtent});
mini.select('.brush').call(brush.extent([minExtent, maxExtent]));
x1.domain([minExtent, maxExtent]);
if ((maxExtent - minExtent) > 5) {
xDateAxis.ticks(10);
}
else if ((maxExtent - minExtent) > 10) {
xDateAxis.ticks(20);
}
else {
xDateAxis.ticks(5);
}
// update the axis
main.select('.main.axis').call(xDateAxis)
.selectAll('text')
.attr('dx', 5)
.attr('dy', 12);
// upate the item rects
rects = itemRects.selectAll('rect')
.data(visItems, function (d,i) { return i; })
.attr('x', function(d) { return x1(d.time_bin); })
.attr('y', function(d) { return y1(d.dist_bin) + .1 * y1(1) + 0.5; })
.attr('width', 165)
.call(updateText);
rects.enter().append('svg:rect')
.attr('x', function(d) { return x1(d.time_bin); })
.attr('y', function(d) { return y1(d.dist_bin) + .1 * y1(1) + 0.5; })
.attr('width', 165)
.attr('class','borderMe')
.attr('height', function(d) { return .8 * y1(1); })
.style('fill', function(d) {
var b = Math.round(colorScale(d.positivity));
return "rgb(25,50," + b + ")";
})
.call(updateText);
rects.exit().remove();
// update the item labels
function updateText() {
console.log('hello!');
labels = itemRects.selectAll('text')
.data(visItems, function (d) { return d.word; })
.text(function (d) { return d.word; })
.attr('x', function(d) {
return Math.round(x1(d.time_bin+0.1));
})
.attr('y', function(d) { return y1(d.dist_bin) + .6 * y1(1)})
.attr('id','hover');
}
labels.enter().append('svg:text')
.text(function (d) { return d.word; })
.attr('x', function(d) {
return Math.round(x1(d.time_bin+0.1));
})
.attr('y', function(d) { return y1(d.dist_bin) + .6 * y1(1) })
.attr('text-anchor', 'start')
.attr('class', 'itemLabel')
.attr('id','hover')
.style('kerning',function(d) {
if (typeFaceScale(d.objectivity) < 1) {
return 0.5;
}
})
.style('font-family', function(d) { // add more if/else to ammend objectivity texts
if (typeFaceScale(d.objectivity) < 1) {
return 'Impact';
}
else if(typeFaceScale(d.objectivity) > 2) {
return 'Times New Roman'
}
else {return 'Rockwell'}
})
.style('font-size',function(d) {
if (d.word.length >= 8 && wordSizeScale(d.frequency)>=16) {
return 16;
}
if ((maxExtent - minExtent) <= 5) {
return Math.round(wordSizeScale(d.frequency))
}
else {
return Math.round(wordSizeScale(d.frequency)- extentSizeScale(maxExtent-minExtent));
}
})
.style('fill','white');
labels.exit().remove();
};