0

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();

};

4

0 に答える 0