Gnuplot技术问题:如何使用数组绘制蜡烛图(Candlestick)
在Gnuplot中使用数组绘制蜡烛图的正确方法
你遇到的问题核心是:Gnuplot中直接plot <数组名> using <固定数组元素>的语法不符合蜡烛图的数据要求——蜡烛图需要单行多列的结构化数据,而直接引用数组名时,Gnuplot会把数组当作单列数据(每个元素对应一行的y值,x为数组索引),导致无法识别蜡烛图所需的多参数列,因此报错“no valid points”。
下面是两种可行的解决方法,实现和数据文件完全一致的蜡烛图效果:
方法1:生成单行临时数据块(最接近你数据文件的用法)
通过set print把数组元素按顺序拼接成一行,写入Gnuplot的临时数据块(以$开头),之后就可以用和数据文件完全相同的plot语法:
array Candle[6] Candle[1] = 1 Candle[2] = 1 Candle[3] = 1000 Candle[4] = 2000 Candle[5] = 3000 Candle[6] = 4000 # 将数组元素按顺序输出为单行,存入临时数据块$CandleRow set print $CandleRow print Candle[1], Candle[2], Candle[3], Candle[4], Candle[5], Candle[6] set print set xrange[0:10] set yrange[0:5000] # 临时数据块格式和candle.txt完全一致,直接复用原plot命令 plot $CandleRow using 1:3:2:6:5 with candlesticks lt 3 lw 2 title 'Quartiles' whiskerbars
方法2:利用table命令转换数组格式
如果需要处理多行数组数据,可先用set table将数组转换为索引-值的表格形式,再手动指定蜡烛图所需的参数:
array Candle[6] Candle[1] = 1 Candle[2] = 1 Candle[3] = 1000 Candle[4] = 2000 Candle[5] = 3000 Candle[6] = 4000 # 将数组内容写入临时表格数据块$CandleTable set table $CandleTable plot Candle with table unset table set xrange[0:10] set yrange[0:5000] # 手动指定蜡烛图的各个参数对应数组元素 plot $CandleTable using (Candle[1]):(Candle[3]):(Candle[2]):(Candle[6]):(Candle[5]) with candlesticks lt 3 lw 2 title 'Quartiles' whiskerbars
两种方法都能成功生成你需要的蜡烛图,其中方法1更简洁,完全匹配你原数据文件的使用逻辑。
内容的提问来源于stack exchange,提问作者Guy B
相关产品推荐
相关产品推荐

