使用TimeSeries.jl和GR.jl绘制OHLC柱报candlestick类型不支持错误
错误触发原因
- 传入的绘图数据不符合要求:示例代码中
ta = [[1,5,0,2]]是Julia原生嵌套向量,并非TimeSeries.jl定义的TimeArray类型。TimeSeries.jl实现的K线(candlestick)绘图逻辑仅对TimeArray类型生效,普通数组无法触发对应绘图配方的加载。 - GR后端无原生K线支持:GR后端本身未内置candlestick序列的渲染能力,K线绘制完全依赖第三方包注册的绘图recipe实现,当传入数据无法命中对应recipe时,就会直接抛出无对应系列支持的错误。
- 即便传入的是
TimeArray类型,如果没有按规范配置:Open(开盘价)、:High(最高价)、:Low(最低价)、:Close(收盘价)四个固定列名,同样无法触发K线绘图逻辑。
解决方法
- 构造符合规范的K线数据结构:先生成单调递增的时间戳序列,再按开、高、低、收的列顺序组织价格矩阵,封装为带正确列名的
TimeArray对象。 - 绘图时直接传入合法的
TimeArray对象即可,TimeSeries.jl的绘图配方会自动识别K线结构并调用candlestick渲染逻辑,无需额外手动指定seriestype参数,手动指定也可正常运行。
可直接运行的修复后代码:
using Plots using TimeSeries using Dates gr() # 生成K线对应的时间戳序列 timestamps = Date(2024, 1, 1):Day(1):Date(2024, 1, 4) # 价格矩阵:每行对应一根K线,列顺序固定为开盘价、最高价、最低价、收盘价 price_data = [ 1 5 0 2 2 6 1 3 3 7 2 4 4 8 3 5 ] # 构造合法的K线TimeArray对象 ta = TimeArray(timestamps, price_data, [:Open, :High, :Low, :Close]) # 绘制K线图 plot(ta)
- 如果上述代码运行仍报错,将本地Plots、TimeSeries.jl包更新到最新稳定版即可,过旧版本可能存在绘图配方注册失效的问题。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

