使用parseDates和dateFormats使用AmCharts股票图表时的默认行为是在有多年数据的1月份开始。网格从一月开始,如果日期格式从YYYY变为MMM YYYY,我将在2014年1月,即2015年1月。
我需要的是能够将网格设置为特定月份,然后标签也显示该月份。例如,我本月创建一个报告,网格线需要在10月而不是1月,标签应该是2014年10月,2015年10月,而不是2014年1月和2015年1月。
我有来自营销团队的请求,他们希望以这种方式显示图表。通过显示10月到10月的网格线,网格线显示更多的年初间距,这是他们希望客户关注的。
使用AmCharts Stock Chart V3可以实现这一目标吗?
答案 0 :(得分:0)
AmChart支持提供了答案。
"categoryAxis": {
"parseDates": true,
"gridAlpha": 0.0,
"gridCount": 0,
"minorGridEnabled": false,
"labelsEnabled": false,
"guides": historyGuide,
"axisColor": "#DADADA",
"dashLength": 1
},
GridAlpha设置为零,因此默认的垂直网格线不会显示。 LabelesEnabled为false,因此默认标签不会显示 创建了指南,提供网格线和标签(见下文)
var historyGuide = [
{
"date": "2017-10-2",
"above": "true",
"lineColor": "#dcddde",
"lineAlpha": 0.7,
"label": "Oct " + 2017,
},
我发现这种方法最适合“addInitHandlers”选项(见下文):
AmCharts.addInitHandler(function (chart) {
var yearsFound = [];
for (var i = 0; i < data_market.length; i++) {
var day = (new Date(data_market[i].date)).getDate();
var month = (new Date(data_market[i].date)).getMonth();
var year = (new Date(data_market[i].date)).getFullYear();
if (month == 9)
{
var isYearFound = yearsFound.find(item =>
{
return item === year;
});
if (isYearFound == false || isYearFound == undefined) {
var guide = new AmCharts.Guide();
guide.date = data_market[i].date;
guide.above = true;
guide.lineColor = "#dcddde";
guide.lineAlpha = 0.7;
guide.lineThickness = 2;
guide.label = "Oct " + year;
chart.categoryAxis.guides.push(guide);
yearsFound.push(year);
}
}
}
});
使用addInitHandler导致页面加载延迟计算了很多图表点,这在PDF生成期间引起了问题。因此,我发现在html中生成时最好在服务器端生成指南(例如通过.cshtml和模型)。