我们正在我们的网站上显示动态数据。用户可以选择不同类型的时间段,例如月度,季度,年度,十年等。我们的问题在于尝试在xAxis上干净地显示季度数据。我们可以使用格式化工具将工具提示正确显示为“Q1 2008”。我们希望让xAxis做类似的事情。我们部分在那里,但我想我在这里做了一些胖手指错误。示例位于jsFiddle。
我们尝试使用的代码位于xAxis标签[formatter][2]
中:
xAxis: {
alternateGridColor: '#FAFAFA',
labels: {
style: {
fontSize: '9px',
width: '175px'
},
formatter: function () {
var s;
if (Highcharts.dateFormat('%b', this.value) == 'Jan') {
s = s + "Q1"
};
if (Highcharts.dateFormat('%b', this.value) == 'Apr') {
s = s + "Q2"
};
if (Highcharts.dateFormat('%b', this.value) == 'Jul') {
s = s + "Q3"
};
if (Highcharts.dateFormat('%b', this.value) == 'Oct') {
s = s + "Q4"
};
s = s + " " + Highcharts.dateFormat('%Y', this.value);
return s;
}
},
tickInterval: 31536000000,
type: 'datetime'
}
这是使用日期时间类型的xAxis并在HighCharts下运行。如果我将tickInterval更改为3个月(259200000),它会变成梨形。 我们期望的结果是xAxis具有以下条目: 2007年第一季度 2007年第二季度 2007年第3季度 2007年第四季度 .. 2012年第四季度
答案 0 :(得分:4)
您可以将tickInterval设置为三个月
tickInterval: 3 * 30 * 24 * 3600 * 1000,
但是当你想要动态改变范围时,你应该使用tickPostitioner
答案 1 :(得分:2)
您可以随时使用自己的tickPositioner
,看看:http://jsfiddle.net/yHmrZ/4/
tickPositioner和formatter的代码:
labels: {
formatter: function () {
var s = "",
d = new Date(this.value),
q = Math.floor((d.getMonth() + 3) / 3); //get quarter
s = "Q" + q + " " + d.getFullYear();
return s;
}
},
tickPositioner: function(min, max){
var axis = this.axis,
act = min,
ticks = [];
while( act < max ){
ticks.push(act);
act = act + (90 * 24 * 3600 * 1000); //three months
}
return ticks;
},