如何将类别轴和网格线移动到Amcharts股票图表V3

时间:2017-10-12 02:47:04

标签: amcharts

使用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可以实现这一目标吗?

1 个答案:

答案 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和模型)。