You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highcharts for Python中to_js_literal()转换时open值为null问题

Highcharts for Python: Candlestick Open Values Become Null in JS Literal

问题描述

使用Highcharts for Python将时间序列K线图转换为JS字面量时,Python中CandlestickData对象的open值显示正常,但调用to_js_literal()方法后,生成的JS数据数组里open字段全部变为null。

环境版本:

  • Python 3.12
  • highcharts-core==1.4.0
  • highcharts-stock==1.4.0

代码及输出:

from highcharts_stock.chart import Chart
ohlcv = [[1665504000000, 20, 21, 19, 20, 322],
         [1665590400000, 21, 23, 21, 22, 168]]
chart = Chart.from_array(ohlcv, series_type='candlestick')

print(chart.options.series[0].data)
# Output: [CandlestickData(open = 20, close = 20, high = 21, low = 19, x = 1665504000000),
# CandlestickData(open = 21, close = 22, high = 23, low = 21, x = 1665590400000)]

js_lit = chart.to_js_literal()
print(js_lit[js_lit.find("data:"):js_lit.find(']]') + 2].replace('\n', ''))
# Output: data: [[1665504000000, null, 21, 19, 20], [1665590400000, null, 23, 21, 22]]

解决方案

1. 升级Highcharts for Python版本

highcharts-core 1.4.0和highcharts-stock 1.4.0存在CandlestickData序列化的bug,后续版本已修复。执行以下命令升级:

pip install --upgrade highcharts-core highcharts-stock

升级后重新运行代码,open值将正确序列化到JS字面量中。

2. 手动构造数据点并指定序列化顺序

若暂时无法升级版本,可手动创建CandlestickData实例,并显式设置序列化字段顺序:

from highcharts_stock.chart import Chart
from highcharts_stock.options.series.candlestick import CandlestickData

ohlcv = [[1665504000000, 20, 21, 19, 20, 322],
         [1665590400000, 21, 23, 21, 22, 168]]

data_points = []
for item in ohlcv:
    x, open_val, high, low, close, volume = item
    data_point = CandlestickData(x=x, open=open_val, high=high, low=low, close=close, volume=volume)
    # 显式定义序列化时的字段顺序
    data_point.serializer.additional_properties = ['x', 'open', 'high', 'low', 'close', 'volume']
    data_points.append(data_point)

chart = Chart()
chart.options.series = [{
    'type': 'candlestick',
    'data': data_points
}]

js_lit = chart.to_js_literal()
print(js_lit[js_lit.find("data:"):js_lit.find(']]') + 2].replace('\n', ''))
# 预期输出: data: [[1665504000000, 20, 21, 19, 20, 322], [1665590400000, 21, 23, 21, 22, 168]]

3. 使用字典格式传递数据

绕过CandlestickData对象的序列化问题,直接用字典数组定义数据:

from highcharts_stock.chart import Chart

ohlcv = [[1665504000000, 20, 21, 19, 20, 322],
         [1665590400000, 21, 23, 21, 22, 168]]

data_dicts = []
for item in ohlcv:
    x, open_val, high, low, close, volume = item
    data_dicts.append({
        'x': x,
        'open': open_val,
        'high': high,
        'low': low,
        'close': close,
        'volume': volume
    })

chart = Chart()
chart.options.series = [{
    'type': 'candlestick',
    'data': data_dicts
}]

js_lit = chart.to_js_literal()
# 生成的JS字面量中open值将正常显示

内容的提问来源于stack exchange,提问作者PetarMignon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:30:18