HighCharts StockChart(烛台 + 柱状范围)叠加层在不同的缩放级别上无法正确显示

HighCharts StockChart (Candlestick + Columnrange) overlay not showing correctly on different zoom levels

提问人:Xnap 提问时间:11/12/2023 最后编辑:Xnap 更新时间:11/13/2023 访问量:22

问:

我在 HighCharts 中将 columnrange 覆盖在股票图表上时遇到了具体问题。我正在尝试创建一个热图叠加层,其中包含限价订单金额主要聚合的水平。我想实现的一个例子是:

热图图表示例

到目前为止,我发现我可以在股票图表上覆盖列范围,以绘制这些区域。不幸的是,有一个错误,或者我在这里做错了什么......这是我想出的:

https://jsfiddle.net/xnappp/1m30xb2v/

var candle_series = []
const xhr = new XMLHttpRequest();
xhr.open('GET', "https://localhost/api/ohlc", false);
try {
  xhr.send();
  if (xhr.status === 200) {
    candle_series = JSON.parse(xhr.responseText);
  } else {
    console.error(`HTTP error! Status: ${xhr.status}`);
  }
} catch (error) {
  console.error('Request error:', error);
}

var color_series = []
const xhr_color = new XMLHttpRequest();
xhr_color.open('GET', "https://localhost/api/walls", false);
try {
  xhr_color.send();
  if (xhr_color.status === 200) {
    color_series = JSON.parse(xhr_color.responseText);
  } else {
    console.error(`HTTP error! Status: ${xhr_color.status}`);
  }
} catch (error) {
  console.error('Request error:', error);
}
console.log(color_series)

Highcharts.stockChart('container', {
  chart: {
    height: '650px'
  },
  series: [{
    id: 'btc',
    name: 'BTC Price',
    type: 'candlestick',
    data: candle_series,
    zIndex: 1
  }, {
    type: 'columnrange',
    name: 'Amount',
    linkedTo: 'btc',
    animation: false,
    findNearestPointBy: 'y',
    cropThreshold: 0,
    pointInterval: 0,
    grouping: false,
    groupPadding: 0,
    data: color_series,
    zIndex: 0
  }],
  plotOptions: {
    series: {
        "turboThreshold": 0
    }
  },
  rangeSelector : {
    enabled: false
  },
  navigator: {
    enabled: false
  }
});

目前图表如下所示:默认图表已损坏

但是当你放大时,关卡开始按应有的方式显示。请参阅同一图形的示例,但已放大:放大的图形正常工作的示例

基本上整个事情有点工作,但是当股票图表开始“聚合”数据时,就会中断,并且只是破坏了整个事情。

任何关于我在这里错过什么的提示都会很棒。提前感谢大家!

Highcharts 股票

评论


答:

1赞 Xnap 11/13/2023 #1

似乎范围系列不正确。正确的一个是分散!经过数小时的调试和测试,我设法解决了它,这是最终解决方案的结果:

工作实例

这是我使用的股票图表代码,供需要此类解决方案的每个人使用:

Highcharts.stockChart('container', {
  chart: {
    height: '650px'
  },
  series: [{
    id: 'btc',
    name: 'BTC Price',
    type: 'candlestick',
    data: candle_series,
    enableMouseTracking: false, // Disable mouseover hover effect
    events: {
      click: function () {
        return false; // Disable click event
      }
    },
    states: {
      hover: {
        brightness: 1 // Disable dimming effect
      }
    },
    zIndex: 1
  }, {
    type: 'scatter',
    name: 'Amount',
    data: transformedCandleSeries,
    color: 'red',
    marker: {
      symbol: 'square',
      radius: 1
    },
    states: {
      hover: {
        brightness: 1 // Disable dimming effect
      }
    },
    zIndex: 0
  }],
  plotOptions: {
    series: {
        "turboThreshold": 0
    }
  },
  rangeSelector : {
    enabled: false
  },
  navigator: {
    enabled: false
  }
});