我之前曾问过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)处查看区间,您会注意到直方图框中间的条形图。它是什么以及如何摆脱它?
答案 0 :(得分:4)
u
标记为未定义的多余点是由于某个错误,请参阅bug #1274。
Gnuplot本身不会自动遵守第三列中的值。因此,尽管每个块中的最后一个点都被标记为未定义,但是gnuplot会绘制它们,这会导致y = 1处的附加条形。
要摆脱它们,您必须通过检查u
明确跳过第三列中strcol(3) eq "u"
的那些点:
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