2013-03-12 48 views
3

我正在使用Highcharts与“scatter”的系列类型。我还启用了x轴缩放功能。Highcharts - 如何在缩放时动态更改标记半径?

现在,将标记半径调整为缩放级别会很好。 喜欢的东西:

events: { 
    selection: function(event) { 
     var extremesObject = event.xAxis[0], 
      min = extremesObject.min, 
      max = extremesObject.max; 

     this.series[0].marker.radius = (max - min)/5; 
    } 

}

最后一行this.series[0]...是我要找的代码。

我尝试这样做:

 jQuery.each(this.series[1].data, function (i, point) { 
      point.update({ 
       marker: { 
        radius: 10/(max - min) 
       } 
      }); 
     }); 

但在重绘事件时这给了我一个错误。这里是一个例子:http://jsfiddle.net/dbX4F/2/

回答

1

我认为这是不可能的当前版本的高图,因为它没有一个API来更新系列选项。但是,它可能在v3Beta版本中。

变焦的数学需要一些工作,但我来到这里工作的基本知识:http://jsfiddle.net/Jrh2G/

events: { 
    selection: function (event) { 
     var extremesObject = event.xAxis[0], 
     min = extremesObject.min, 
     max = extremesObject.max; 
     console.log(min + " " + max); 
     // The maths needs some work to make the radius scale better with min/max. 
     // Also, you should probabl take into account min/max y values as well. 
     this.series[0].update({marker:{radius:10/(max-min)}}); 
} 
+0

大,这个作品!但我不知道我是否应该使用测试版本,因为这是一个商业服务器... 我试过类似这样的使用非beta版,但给我一个错误:'jQuery.each(this.series [ 0] .data,function(i,point){point.update {{marker:{radius:10 /(max-min)}});});' – rantanplan 2013-03-12 09:32:36

+0

这个月beta版本发布。我一直在看它或我们的生产环境,因为我们需要泡泡图功能。虽然我在泡泡图中报告了一个错误,但它目前看起来还不错。 – SteveP 2013-03-12 09:37:45

+0

你用point.update得到了什么错误? – SteveP 2013-03-12 09:39:10

0

最后,我找到了解决办法。它可以在同一阵列中的超车点配置的图形数据:

jQuery.each(data, function(i, val) { 
    if (i > min && i < max) { 
     detailScatter.push({ 
      marker: { 
       radius: 80/(max - min) 
      }, 
      x: i, 
      y: val 
     }); 
    } 
}); 

detailChart.series[1].setData(detailScatter); 

就像一个魅力 - 在这里看到:http://jsfiddle.net/dbX4F/3/