我尝试使用文本创建热图。使用示例我创建了以下代码:
for (var i = 0; i < trgLength; ++i) {
for (var j = 0; j < srcLength; ++j) {
var newItem = {}
newItem.srcWord = decodeHTML(data[k].src[j])
newItem.trgWord = decodeHTML(data[k].trg[i])
newItem.value = data[k].attentions[i][j]
sen_data.push(newItem)
}
}
var x_elements = data[k].src.map(function(item){return decodeHTML(item)}),
y_elements = data[k].trg.map(function(item){return decodeHTML(item)});
var xScale = d3.scale.ordinal()
.domain(x_elements)
.rangeBands([0, x_elements.length * itemSize]);
var xAxis = d3.svg.axis()
.scale(xScale)
.tickFormat(function (d) {
return d;
})
.orient("top")
var yScale = d3.scale.ordinal()
.domain(y_elements)
.rangeBands([0, y_elements.length * itemSize]);
var yAxis = d3.svg.axis()
.scale(yScale)
.tickFormat(function (d) {
return d;
})
.orient("left");
var cells = svg.selectAll('rect')
.data(sen_data)
.enter().append('g').append('rect')
.attr('class', 'cell')
.attr('width', cellSize)
.attr('height', cellSize)
.attr('y', function (d) {
return yScale(d.trgWord);
})
.attr('x', function (d) {
return xScale(d.srcWord);
})
如果句子中的单词(src和target)是唯一的,这就可以了。如果不是,则仅绘制该单词的一个实例。 有没有办法单独编码单词?我正在考虑使用句子中的位置,然后更改标签,但我找不到一个简单的方法来实现它