我在 x 轴上有一个日期图表。现在我还想添加时间并将其放在每个刻度的日期下方的行中,因为每个刻度的文本都变得相当宽,带有日期和时间。
通过查看下面的问题建议,我尝试了这个:
var xMainScale = d3.scale.linear()
.domain([0,100])
.range([20, 600]);
//--- date format
var formatAsDate = function(d) {var md = new Date(d*1000);
md_utc=new Date(md.getUTCFullYear(), md.getUTCMonth(),
md.g etUTCDate(), md.getUTCHours(), md.getUTCMinutes(), md.getUTCSeconds());
return md_utc.format("Y-m-d H:i:s");};
//--- label on several rows
var insertLinebreaks = function (d) {
var el = d3.select(this);
var words = d.split(' ');
el.text('');
for (var i = 0; i < words.length; i++) {
var tspan = el.append('tspan').text(words[i]);
if (i > 0)
tspan.attr('x', 0).attr('dy', '15');
}
};
//===== axis
var xMainAxis = d3.svg.axis()
.scale(xMainScale)
.orient("bottom")
.ticks(5)
.tickFormat(formatAsDate);
//====== create SVG element
var chart = d3.select("body")
.append("svg:svg")
.attr("width", w)
.attr("height", h)
.attr("id","chart")
.attr("class","chart");
//==== main chart (there are more but I left them out here)
var main = chart.append('g')
.attr('transform', 'translate(' + 25 + ',' + 25 + ')')
.attr('width', w)
.attr('height', main_h)
.attr('class', 'main')
.attr('id', 'mainchart');
//===== create x axis
main.append("g")
.attr("id","main_x")
.attr("class", "x_axis")
.attr("transform", "translate("+0+"," + (700 - 25) + ")")
.call(xMainAxis);
在一个功能有点下降:
//----- update the axis
main.select('#main_x').call(xMainAxis);
main.selectAll('#main_x g text').each(insertLinebreaks);
由于我的代码相当大,我已经删除并超越了我认为重要的部分。我想我将错误的对象传递给 insertLinebreaks 函数,但我应该传递什么?
/拉尔斯