如何使用gnuplot的every关键字按数据块采样生成分组柱状图
every关键字参数释义
你看到的官方语法按顺序对应6个可配置参数,含义如下:every <点步长>:<块步长>:<起始点索引>:<起始块索引>:<结束点索引>:<结束块索引>
先对齐两个基础概念:
- 数据块:两个空行分隔的一段有效数据为1个独立块,块索引从0开始计数
- 数据点:每个块内排除注释行后的每一行数据为1个数据点,点索引从0开始计数
你的样例数据刚好符合4个块的要求:块0是x从0到0.8的第一组、块1是x从1到1.8的第二组、块2是x从3到3.8的第三组、块3是x从4到4.8的第四组,每个块各有5个有效数据点。
对应场景的使用示例
场景1:读取全部4个块绘制柱状集群
这是你需要的核心用法,命令如下:
# 预先设置柱状图样式 set style data histogram set style fill solid border -1 set style histogram cluster gap 1 # 用every读取所有块绘制4组集群柱 plot '你的数据文件.dat' every 1::0::0::4::3 using 2:xtic(1) title "第一组", \ '' every 1::1::0::4::3 using 2 title "第二组", \ '' every 1::2::0::4::3 using 2 title "第三组", \ '' every 1::3::0::4::3 using 2 title "第四组"
上述every 1::0::0::4::3参数拆解:
- 第一个参数
1:点步长为1,读取每个块的全部数据点 - 第二个参数空缺(默认值1):块步长为1,按顺序读取所有符合要求的块
- 第三个参数
0:从每个块的第0个数据点开始读取 - 第四个参数
0:从第0个块开始读取 - 第五个参数
4:读取到每个块的第4个数据点结束(刚好覆盖5个点) - 第六个参数
3:读取到第3个块结束
场景2:单独读取单个块调试
如果只需要绘制第二组(块索引为1)的数据,命令如下:
plot '你的数据文件.dat' every 1:1:0:1:4:1 using 1:2 with boxes title "第二组数据"
这里指定了起始块和结束块都为1,就只会读取第二组的内容。
场景3:按间隔抽取数据点
如果不需要每个块的全部5个点,只需要第1、3、5个点(索引0、2、4),将点步长设为2即可:
plot '你的数据文件.dat' every 2::0::0::4::3 using 2:xtic(1)
内容的提问来源于stack exchange,提问作者ex1led
相关产品推荐
相关产品推荐

