我有一张Highcharts图形http://jsfiddle.net/jerryvermanen/XRjyc/,但我想添加一个输入字段。输入字段要求一年。输入后:
为了使事情变得复杂一点,输入年份为1992年(4。94%),1993年(3,7%),1994年(4,77%),1996年(4,52%), 1997年(4,94%),1998年(3,74%)和1999年(4,77%),()之间的百分比应在3-1-2001之间加上。
chart = new Highcharts.Chart({
exporting: {
enabled: false
},
chart: {
renderTo: 'container',
type: 'spline',
marginRight: 20
},
title: {
text: 'Rente DUO'
},
subtitle: {
text: ''
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: { // don't display the dummy year
month: '%Y',
year: '%Y'
}
},
yAxis: {
min:0,
title: {
text: 'Werkloosheid (%)'
},
plotLines: [{
value: 0,
width: 2,
color: '#000000',
zIndex: 5
}, {
label: {
text: 'Rente DUO',
align: 'right'
},
value: 5,
width: 0.5,
color: '#ffffff',
zIndex: 1
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'<br/>'+
Highcharts.dateFormat('%b %Y', this.x) +':</b> '+ this.y +'%';
}
},
plotOptions: {
spline: {
lineWidth: 3,
states: {
hover: {
lineWidth: 4
}
},
marker: {
enabled: false,
states: {
hover: {
enabled: true,
symbol: 'circle',
radius: 4,
lineWidth: 1
}
}
}
}
},
legend: {
enabled: false
},
如果这很复杂,也可以在输入一年后绘制新图表。该图表将是具有相同数据的步骤线图。
如何做到这一点?
答案 0 :(得分:2)
有趣的要求,我想除了第五个以外我都有。
要做到这一点相当容易。您需要plotLines
,输入表单和另一个<div>
元素。
首先,您需要从输入表单中提取您的年份并为其添加1年(不确定为什么+1,但在此处):
passedYear = parseInt($('input:text').val(), 10) + 1;
然后你需要将这个人类可读的年份转换为javascript时间戳:
showYear = Date.UTC(passedYear, 0, 1);
从这里开始,您还需要考虑用户输入的值是否高于数据的最大年份(并且还小于最小值)。以下是测试大于场景的方法:
var extremes = chart.xAxis[0].getExtremes();
var maxYear;
maxYear = extremes.dataMax;
if (maxYear > showYear) {
do stuff
}
然后,您可以创建初始plotLine
:
chart.xAxis[0].addPlotLine({
value: showYear,
color: 'red',
width: 2,
id: 'plotLine'
});
接下来,您希望以5年为增量显示其他plotLine
项:
var plInterval;
plInterval = 5;
while (nextPL < maxYear) {
chart.xAxis[0].addPlotLine({
value: nextPL,
color: 'red',
width: 2,
id: 'plotLine'
});
nextYear = nextYear + plInterval;
nextPL = Date.UTC(nextYear, 0, 1);
}
这是为了确保我们不会将不必要的plotLine
项目添加到永远不会显示的无穷大。
附加要求是在页面上显示“您支付xxxx”文字。为此,您需要一个<div>
元素(或其他任何东西)来写入。为了获得这些值,我从here中得到了很好的功能:
function getYValue(chartObj, seriesIndex, xValue) {
var yValue = null;
var points = chartObj.series[seriesIndex].points;
for (var i = 0; i < points.length; i++) {
if (points[i].x >= xValue) break;
yValue = points[i].y;
}
return yValue;
}
我用它像:
var yVal1;
yVal1 = getYValue(chart, 0, maxYear);
strInterestPay = strInterestPay + yVal1 + '%, ';
然后我将此strInterestPay
写入<div>
:
$("div:interest").html(strInterestPay);
现在,我们需要写出其他plotLine
项目的百分比:
yVal1 = getYValue(chart, 0, nextPL);
strInterestPay = ', ' + yVal1 + '%';
$('.content').append(strInterestPay);