gnuplot:数据表类型值='u'和直方图框中的奇数条

时间:2015-09-11 12:12:49

标签: gnuplot

我之前曾问过this个问题。这是一个相关的问题。

使用test.txt文件:

-0.1  0  0  JANE
1  1  1  BILL
2  2  1  BILL
1  3  1  BILL
6  4  0  JANE
35 5  0  JANE
9  6  1  BILL
4  7  1  BILL
24 8  1  BILL
28 9  1  BILL
9  10  0  JANE
16 11  1  BILL
4  12  0  JANE
45 13  1  BILL

和Gnuplot脚本:

file='test.txt'
binwidth=10
bin(x,width)=width*floor(x/width)

set table "data_table"

plot file using (bin($1,binwidth)):(1.0) smooth freq,\
file using (1+(bin($2,binwidth))):(1.0) smooth freq

unset table

set boxwidth 1
set logscale y
set yrange[0.01:15]

plot "data_table" index 0 using ($1):($2 == 0 ? 1/0 : $2) with boxes,\
"data_table" index 1 using ($1):($2 == 0 ? 1/0 : $2) with boxes

我得到data_table

# Curve 0 of 2, 7 points
# Curve title: "file using (bin($1,binwidth)):(1.0)"
# x y type
-10  1  i
 0  8  i
 10  1  i
 20  2  i
 30  1  i
 40  1  i
 0  1  u


# Curve 1 of 2, 3 points
# Curve title: "file using (1+(bin($2,binwidth))):(1.0)"
# x y type
 1  10  i
 11  4  i
 1  1  u

Gnuplot shell中的每个“帮助集表”: “......字符R取三个值中的一个:  “i”如果该点在活动范围内,“o”如果它在范围之外,或“u”  如果它未定义。“

问题1 :为什么data_table中每个索引组的最后一行的值都为u,为什么它的x值似乎是无序?

问题2 :生成的图表与Miguel's second plot非常相似。如果您在(x = 0,y = 1)处查看区间,您会注意到直方图框中间的条形图。它是什么以及如何摆脱它?

1 个答案:

答案 0 :(得分:4)

  1. u标记为未定义的多余点是由于某个错误,请参阅bug #1274

  2. Gnuplot本身不会自动遵守第三列中的值。因此,尽管每个块中的最后一个点都被标记为未定义,但是gnuplot会绘制它们,这会导致y = 1处的附加条形。

    要摆脱它们,您必须通过检查u明确跳过第三列中strcol(3) eq "u"的那些点:

  3. file='test.txt'
    binwidth=10
    bin(x,width)=width*floor(x/width)
    
    set table "data_table"
    
    plot file using (bin($1,binwidth)):(1.0) smooth freq,\
    file using (1+(bin($2,binwidth))):(1.0) smooth freq
    
    unset table
    
    set boxwidth 1
    set logscale y
    set yrange[0.01:15]
    unset key
    
    plot "data_table" index 0 using ($1):($2 == 0 || strcol(3) eq "u" ? 1/0 : $2) with boxes,\
    "data_table" index 1 using ($1):($2 == 0 || strcol(3) eq "u" ? 1/0 : $2) with boxes
    

    enter image description here