如何根据正负数据调整Highcharts标记半径?现有代码能否生效?
散点图按正负值调整标记半径的方案可行性分析
你的这个方案不可行,问题出在几个关键细节上:
- 直接将
new_array赋值为chart.series[0].data属于引用赋值,会直接修改原数据对象;而且你后续把new_array[i].y改成了字符串格式内容,Highcharts完全无法识别这种错误的点数据结构 - 循环里拼接字符串的逻辑完全错误,比如
"{y:"+ new_array[i] +",marker: {radius: 10}}"会把整个点对象转成字符串拼进去,生成的内容完全不符合Highcharts要求的点数据格式
要实现需求,你需要重新构造符合规范的点数组,每个点是包含y值和marker配置的对象。下面是修正后的完整代码:
<html> <head> <script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js"></script> <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> </head> <body> <div id="demochart"></div> <button id="update"> Update</button> <script> Highcharts.chart('demochart', { chart: { type: 'scatter' }, xAxis: { categories: [0, 10, 20, 30, 40, 50, 60, 70, 80] }, series: [{ name: 'Temperature', data: [15, 50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, 76.5] }] }, function(chart){ $('#update').click(function(){ // 从原数据提取y值,重新构造符合要求的点数组 var originalData = chart.series[0].data; var newData = originalData.map(function(point) { return { y: point.y, marker: { radius: point.y > 0 ? 10 : 4 } }; }); chart.series[0].setData(newData); }); }); </script> </body> </html>
修正后的逻辑说明:
- 使用
map方法遍历原数据点,为每个点创建新的配置对象,明确包含y值和对应的marker半径 - 正值点设置半径为10,负值点设置为4,完全匹配Highcharts的点数据格式要求
- 避免了引用赋值导致的原数据污染问题
内容的提问来源于stack exchange,提问作者Srinadh Reddy
相关产品推荐
相关产品推荐

