使用 gnuplot 绘制带有缩写值的数据文件
Plotting datafile with abbreviated values with 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 轴上标记为 "Time",其余是与时间相关的不同中断值(即 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',函数 strstrt
returns '0'。)
如果输入中包含字母'k',则取输入,舍弃最后一个字母,将剩余部分转为数字乘以1000。
如果输入不包含'k'、return则输入
现在你可以绘制数据文件了(假设它的名字是test
):
plot 'test' u 1:(check(stringcolumn(2))) w l
这应该可以完成工作!
一个非纯粹的 gnuplot,unix 解决方案将使用 process substitution:
plot "<(sed 's/k/000/g' datafile.dat)" u 1:2 w lp
sed 's/k/000/g'
命令将 datafile.dat
中所有出现的字符 k
替换为 000
:例如96k 将替换为 96000.
输出类似于@Knorr
发布的情节
我有一个如下所示的 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 轴上标记为 "Time",其余是与时间相关的不同中断值(即 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',函数 strstrt
returns '0'。)
如果输入中包含字母'k',则取输入,舍弃最后一个字母,将剩余部分转为数字乘以1000。
如果输入不包含'k'、return则输入
现在你可以绘制数据文件了(假设它的名字是test
):
plot 'test' u 1:(check(stringcolumn(2))) w l
这应该可以完成工作!
一个非纯粹的 gnuplot,unix 解决方案将使用 process substitution:
plot "<(sed 's/k/000/g' datafile.dat)" u 1:2 w lp
sed 's/k/000/g'
命令将 datafile.dat
中所有出现的字符 k
替换为 000
:例如96k 将替换为 96000.
输出类似于@Knorr
发布的情节