Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gnuplot使用缩写值打印数据文件_Gnuplot - Fatal编程技术网

使用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

我有一个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   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