我试图为我正在工作的热图绘制垂直标签。我正在使用http://bl.ocks.org/tjdecke/5558084中的示例。以下是我已更改的代码部分:
var timeLabels = svg.selectAll(".timeLabel")
.data(ife_nr)
.enter().append("text")
.text(function(d) {
return d;
})
.attr("x", function(d, i) {
return (i * gridSize);
})
.attr("y", 0)
//.style("text-anchor", "middle")
//.attr("transform", "translate(" + gridSize / 2 + '-5' + ")")
.attr("transform", "translate(" + gridSize/2 + '-8' + "), rotate(-90)")
.attr("class", function(d, i) {
return ((i >= 0) ? "timeLabel mono axis axis-worktime" : "timeLabel mono axis");
});
但似乎标签似乎在第一个网格顶部彼此堆叠在一起。如何编辑此代码以正确显示标签?
答案 0 :(得分:0)
两个问题:首先,translate
应该用逗号分隔值:
"translate(" + gridSize/2 + ",-8), rotate(-90)")
假设-8
是翻译的y值。如果您没有逗号,则括号内的值应仅为x
转换(如果未提供y
,则假定为零)。但即使实际上没有逗号而且所有gridSize/2 + '-8'
只是x
值仍然存在问题,因为number
加string
是string
。你必须澄清这一点。
除此之外,要在中心上旋转文本,您必须设置cx
的{{1}}和cy
。看看这个演示:
rotate

var svg = d3.select("body")
.append("svg")
.attr("width", 400)
.attr("height", 100);
var texts = svg.selectAll(".texts")
.data(["foo", "bar", "baz"])
.enter()
.append("text");
texts.attr("y", 50)
.attr("x", function(d,i){ return 50 + 80*i})
.text(function(d){ return d});
texts.attr("transform", function(d,i){
return "rotate(-90 " + (50 + 80*i) + " 50)";
});