" tickPositions未定义"添加第二个Y轴后

时间:2014-07-15 05:01:30

标签: javascript highcharts

我有一个Highcharts图表,当有两个Y轴时会在addSeries方法中抛出错误。

这是一个Backbone项目,所以我简化了这个JSFiddle中的代码:http://jsfiddle.net/michalcarson/V84pP/

代码创建一个没有数据的图表。它增加了第二个Y轴。然后它添加第一个系列的数据。此时发生错误:" TypeError:tickPositions未定义"在highcharts.src.js第7315行。

我添加的数据应该与主y轴(chart.yAxis [0])相关联,但是无论我是否指定了该关联,都会发生错误。有关更多详细信息,请参阅JSFiddle。

var chart,
options = {
    chart: {
        renderTo: 'chartdiv'
    }
},

real_series = {
    "data": [10.816667, 8.458333, 9.1, 8.794771, 7.91789, 7.281212,
        6.671075, 6.08748, 5.530427, 4.999916, 4.495946, 4.018517, 3.567631]
};

chart = new Highcharts.Chart(options);

chart.addAxis({
    id: "LCUReal",
    title: { text: "LCU Real" },
    opposite: true
}, false);

chart.addSeries(real_series);

我使用的是jQuery 1.11.1和Highcharts 4.0.3。

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/4.0.3/highcharts.src.js"></script>
<div id="chartdiv"></div>

所以问题是:这段代码有什么问题?如何在没有此错误的情况下使第二个Y轴工作?

我没有对tickPositions做任何事情。我以前从未见过。我很高兴让Highcharts能够解决这个问题。

2 个答案:

答案 0 :(得分:0)

因为您的轴没有范围,所以您可以通过将轴与第一个轴链接来消除它。

示例:

chart.addAxis({
            linkedTo: 0,
            id: "LCUReal",
            title: {
                text: "LCU Real"
            },
            opposite: true
        }, false);

http://jsfiddle.net/sFfrL/8/

答案 1 :(得分:0)

如果我推迟创建辅助y轴直到需要它,我发现我可以做这项工作。也就是说,

  • 添加主y轴,
  • 使用主y轴添加数据系列
  • 添加辅助y轴,
  • 使用辅助y轴添加数据系列。

更正后的代码:

var chart,
options = {
    chart: {
        renderTo: 'chartdiv'
    }
},

series1 = {
    "name": "Interest Rate %",
    "data": [10.816667, 8.458333, 9.1, 8.794771, 7.91789, 7.281212,
    6.671075, 6.08748, 5.530427, 4.999916, 4.495946, 4.018517, 3.567631],
    "yAxis": "%"
},
series2 = {
    "name": "Exports",
    "data": [5803.475611, 5820.886038, 5925.661986, 6022.908979, 6091.005915, 6133.429061, 
             6158.918132, 6174.863244, 6186.050828, 6195.144854, 6203.458226, 6211.561078, 6219.661642],
     "yAxis": "LCUReal"
};

chart = new Highcharts.Chart(options);

chart.yAxis[0].update({
    id: "%",
    title: { text: "%" }
});

// SOLUTION: adding series1 here prevents the error
chart.addSeries(series1);

chart.addAxis({
    id: "LCUReal",
    title: {
        text: "LCU Real"
    },
    opposite: true
}, false);

// PROBLEM: adding secondary y-axis before adding data series to the primary y-axis throws 
//          TypeError: tickPositions is undefined.
// PROBLEM: even if the data is added above before the secondary y-axis is created, adding 
//          a series to the primary y-axis when there is no data on the secondary y-axis
//          will throw the same TypeError: tickPositions is undefined.
//chart.addSeries(series1);
chart.addSeries(series2);