如何在gnuplot中结合xtics与xticlabels设置X轴刻度
Gnuplot绘制K线图:X轴每5天显示日期刻度的解决方案
在绘制包含节假日/周末缺口的K线数据时,常会遇到这些问题:
- 用
xticlabels设置日期标签后,set xtics 5完全失效,无法控制刻度间隔 - 直接把X轴设为日期类型,会因为数据缺口出现绘图断层或日期对应错误
针对这些问题,以下提供两种可行解决方法,适用数据集字段为Count,Date,Open,High,Low,Close:
方法一:用自定义函数筛选刻度标签
定义函数仅给每第N个数据点生成日期标签,其余点留空,以此实现间隔显示。
# 定义函数:每5个数据点显示一次日期标签 everyNth(n) = int($0) % n == 0 ? strftime("%Y-%m-%d", strptime("%Y-%m-%d", $2)) : "" # 设置K线图样式 set style data candlesticks set style fill solid border -1 set boxwidth 0.8 relative # 绘制K线,用Count作为X轴避免缺口,通过函数控制标签显示 plot 'data.csv' using 1:3:4:5:6:xtic(everyNth(5)) notitle with candlesticks
说明:
$0是gnuplot内置行号(从0开始计数),通过取模判断是否为目标点- 用
Count字段(第一列)作为X轴,保证数据连续无断层 - 非目标点返回空字符串,不会生成多余刻度
方法二:通过额外绘图层添加间隔刻度
先绘制无刻度的K线图,再单独用一个图层绘制间隔5天的日期标签。
# 设置K线图样式 set style data candlesticks set style fill solid border -1 set boxwidth 0.8 relative # 关闭默认X轴刻度和标签 set xtics nomirror noenhanced unset xtics # 先绘制K线图,再叠加间隔刻度标签 plot 'data.csv' using 1:3:4:5:6 notitle with candlesticks, \ 'data.csv' using 1:(0):xtic(2) every 5 notitle with labels offset 0,-1.2
说明:
- 第一个plot仅绘制K线,不显示任何X轴刻度
- 第二个plot用
every 5筛选数据点,在X轴对应位置绘制日期标签 offset 0,-1.2用于调整标签位置,避免和K线图重叠
内容的提问来源于stack exchange,提问作者aoliv
相关产品推荐
相关产品推荐

