我有一个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自动解释缩写值并相应地绘制它们?
答案 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
这应该可以胜任!
答案 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
发布的图