2015-11-03 54 views
2

缩写值绘制数据文件我有一个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

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

你可以,但是,写自己的函数转换字符串输入到数字

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

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

现在你可以绘制数据文件(假设它的名字是test):

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

enter image description here

This shoul d做这份工作!

+0

情节我有gnuplot的4.2,是无法重现的功能如你因语法错误描述。但是,更新到版本4.4后,它工作正常。 – Decrypto

+0

@Decrypto:我很高兴你的问题解决了。升级当然是一个好主意(考虑到2007年发布了4.2)。 但即使是4.4版本也很旧(2010)。如果所有东西都适合4.4,那就留下来吧。但请记住,目前的版本是5.0(2015年发布) –

2

非纯粹的gnuplot,UNIX溶液将使用process substitution

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

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

被替换的输出类似于张贴@Knorr