使用gnuplot绘制带有缩写值的数据文件

时间:2015-11-03 19:41:21

标签: 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   128k  130k  131k  135k
10   129k  133k  130k  132k

第一列将在X轴上标记为“时间”,其余是相对于时间的不同中断值(即IRQ1,IRQ2,IRQ3,IRQ4)

使用此方法生成绘图时的问题是,gnuplot似乎不会将带有K后缀的缩写值解释为数千个数字,而是将原始值解释为99,67,119等。因此,行将在时间1从大约5000跳,并在图中下降到大约100。

是否有任何选项可以告诉gnuplot自动解释缩写值并相应地绘制它们?

2 个答案:

答案 0 :(得分:2)

我认为在这种情况下,没有直接告诉gnuplot如何解释输入。

但是,您可以编写自己的函数,将字符串输入转换为数字

check(x)=(pos=strstrt(x,"k"),\
    pos > 0 ? real(substr(x,1,pos-1))*1000  : real(x))

函数check首先确定输入中字母“k”的位置。 (如果输入strstrt不包含字母'k',则函数x返回'0'。)
如果输入包含字母'k',请取输入,丢弃最后一个字母,将剩余部分转换为数字并乘以1000。 如果输入不包含'k',则返回输入

现在您可以绘制数据文件(假设其名称为test):

plot 'test' u 1:(check(stringcolumn(2))) w l

enter image description here

这应该可以胜任!

答案 1 :(得分:2)

一个非纯粹的gnuplot,unix解决方案将使用process substitution

plot "<(sed 's/k/000/g' datafile.dat)" u 1:2 w lp

sed 's/k/000/g'命令将所有出现的k字符替换为000中的datafile.dat:例如96k将被替换为96000。

输出类似于@Knorr

发布的图