使用gnuplot使用缩写值打印数据文件
我有一个gnuplot数据文件,如下所示:使用gnuplot使用缩写值打印数据文件,gnuplot,Gnuplot,我有一个gnuplot数据文件,如下所示: 1 4810 582 573 587 2 99k 67k 56k 40k 3 119k 82k 68k 49k 4 119k 81k 68k 49k 5 120k 81k 65k 45k 6 121k 82k 65k 44k 7 124k 106k 97k 86k 8 128k 134k 131k 131k 9
1 4810 582 573 587
2 99k 67k 56k 40k
3 119k 82k 68k 49k
4 119k 81k 68k 49k
5 120k 81k 65k 45k
6 121k 82k 65k 44k
7 124k 106k 97k 86k
8 128k 134k 131k 131k
9 128k 130k 131k 135k
10 129k 133k 130k 132k
第一列将在X轴上标记为“时间”,其余为与时间相关的不同中断值(即IRQ1、IRQ2、IRQ3、IRQ4)
使用此函数生成绘图时的问题是,gnuplot似乎不会将带有K后缀的缩写值解释为以千为单位的数字,而是将其解释为原始值,如99、67、119等。因此,在时间1,线条将从5000左右跳到100左右
是否有任何选项可以告诉gnuplot自动解释缩写值并相应地绘制它们 我认为没有直接的方法告诉gnuplot在这种情况下如何解释输入 但是,您可以编写自己的函数,将字符串输入转换为数字
check(x)=(pos=strstrt(x,"k"),\
pos > 0 ? real(substr(x,1,pos-1))*1000 : real(x))
功能check
首先确定字母“k”在输入中的位置。(如果输入x
不包含字母“k”,则函数strstrstrt
返回“0”。如果输入包含字母“k”,则接受输入,丢弃最后一个字母,将剩余部分转换为数字并乘以1000。 如果输入不包含“k”,则返回输入 现在可以绘制数据文件(假设其名称为
test
):
这应该能行 非纯gnuplot的unix解决方案将使用:
plot“我有gnuplot 4.2,由于语法错误,无法复制您描述的函数。但是,在将其更新到版本4.4后,它工作正常。@Decrypto:我很高兴您的问题得到了解决。升级当然是个好主意(考虑到4.2在2007年发布)。但即使是版本4.4也相当旧(2010年)。如果4.4的所有功能都适用,请继续使用。但请记住,当前版本是5.0(2015年发布)
plot 'test' u 1:(check(stringcolumn(2))) w l
plot "<(sed 's/k/000/g' datafile.dat)" u 1:2 w lp