我观察到 multibarchart innvd3.js
需要以下 JSON 格式输入。
[
{
"key": "abcd",
"values": [
{
"x": 1221578789000,
"y": 40
},
{
"x": 1222578789000,
"y": 103
},
{
"x":1224181799000,
"y": 35
}
]
}
]
但是,我想有带有 DateTimestamp 的 x 标签。'x' 是否必须只有 int/long 数据类型?
话虽如此,我尝试在代码中将长数据类型转换为日期时间戳nvd3.js
。
nv.models.axis = function() {
{code block}
switch (axis.orient()) {
case 'bottom':
{code block}
if (showMaxMin) {
//if (showMaxMin && !isOrdinal) {
var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
//.data(scale.domain())
.data([scale.domain()[0], scale.domain()[scale.domain().length - 1]]);
axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text');
axisMaxMin.exit().remove();
axisMaxMin.attr('transform', function(d,i) {
return 'translate(' + (scale(d) +
(isOrdinal ? scale.rangeBand() / 2 : 0)) + ',0)'
})
.select('text')
.attr('dy', '.71em')
.attr('y', axis.tickPadding())
.attr('transform', function(d,i,j) {
return 'rotate('+ rotateLabels + ' 40,60)'
})
.attr('text-anchor', rotateLabels ? (rotateLabels%360 > 0 ?
'start' : 'end') : 'middle')
.text(function(d,i) {
**var dat = new Date(d);**
**return dat.toUTCString();**
//return v;
});
d3.transition(axisMaxMin)
.attr('transform', function(d,i) {
//return 'translate(' + scale.range()[i] + ',0)'
//return 'translate(' + scale(d) + ',0)'
return 'translate(' + (scale(d) + (isOrdinal ?
scale.rangeBand() / 2 : 0)) + ',0)'
});
}
}
}
通过这种更改,我能够将 MaxMin 'x labels' 转换为 Datetime stamp。但我无法找到对刻度标签进行相同转换的位置('min x' 和 'max x' 轴之间的标签显示长值本身)。