GNUPLOT图中的空白区域

时间:2012-11-08 17:54:34

标签: gnuplot

我在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。

1 个答案:

答案 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只会在您的命令字符串中写入数字。