我在gnuplot脚本上遇到了奇怪的行为。此脚本的目标是读取文件并使用文件的第一行作为系列标题绘制一组特定的行(基于文件中给定起点的3个连续行)。
虽然情节在概念上有效,但我在左侧的图像中遇到大量插入,就好像读取空行并将其绘制为0(没有标题)
输入文件:
Level,Filter,Type,Set1,Set2,Set3
Level1,Filter1,Type1,112,186,90
Level1,Filter1,Type2,233,335,159
Level1,Filter1,Type3,224,332,157
代码:
set terminal postscript color
set output '| epstopdf --filter --outfile=output.pdf'
set boxwidth 0.5
set style fill solid
set style data histograms
set datafile separator ","
LINE1 = 1 + 3 * COUNT
LINE2 = LINE1 + 1
LINE3 = LINE1 + 2
plot '../test.csv' \
u ( ( int($0) == LINE1 || int($0) == LINE2 || int($0) == LINE3)? $4 : 1/0) ti col,'' \
u ( ( int($0) == LINE1 || int($0) == LINE2 || int($0) == LINE3)? $5 : 1/0) ti col,'' \
u ( ( int($0) == LINE1 || int($0) == LINE2 || int($0) == LINE3)? $6 : 1/0) ti col
命令行呼叫
>gnuplot -e "COUNT=0" test.plot
如何摆脱导致右移的空白字段?
我的gnuplot版本是4.6。
答案 0 :(得分:2)
由于您已经在使用管道和unix-ish工具,我也会在这里使用sed
:
set term post color
set output 'foo.ps'
set style data histograms
set style histogram clustered
set datafile separator ","
set boxwidth 0.5
set style fill solid
SED_CMD = sprintf('< sed -n -e 1p -e %d,%dp test.csv',COUNT*3+2,COUNT*3+4)
plot for [COL=4:6] SED_CMD u COL ti col
在我试图弄清楚你的脚本在做什么的时候,我已经简化了很多东西 - 我使用了绘图迭代(在gnuplot 4.3中引入)。最初我曾认为plot '...' every ...
会起作用,但直方图似乎在every
上窒息而且我还没有理解为什么。
以下是对sed
命令的解释:
-e 1p #print first line in file
-e %d,%dp #print n'th line through m'th line (inclusive) where n=COUNT*3+2 and m=COUNT*3+4
如果你担心外壳注射,这似乎也是安全的:
gnuplot -e 'COUNT=";echo hi"' -persist test.gp
"test.gp", line 10: Non-numeric string found where a numeric expression was expected
Gnuplot只会在您的命令字符串中写入数字。