2012-08-23 194 views
2

我試圖做一個直方圖出的數據中,看起來像這樣的文件:繪製直方圖條件

#Column 1 Column 2 
# 
0.0300  0.2126 
1.0000e-4 0.0104 
6.0000e-3 0.1299 
1.0000e-4 8.0600e-3 
1.0000e-4 0.0105 
0.0190  0.2204 
6.0000e-3 7.4900e-3 
1.0000e-4 0.0952 
6.0000e-3 7.4200e-3 
1.0000e-4 0.0131 
0.0190  0.3062 
0.0190  0.2561 
0.0300  0.9748 
0.0300  0.9406 
0.0300  0.0139 
1.0000e-4 0.0281 
0.0300  0.3625 
1.0000e-4 0.0945 
0.0300  0.5650 
1.0000e-4 0.1045 
6.0000e-3 0.2362 
1.0000e-4 0.0180 
1.0000e-4 0.1366 
1.0000e-4 0.0195 
0.0300  0.4652 
0.0190  0.3505 
0.0300  0.5146 
0.0190  0.4319 
6.0000e-3 0.2054 
6.0000e-3 0.2377 
0.0300  0.5281 
1.0000e-4 0.1128 
6.0000e-3 0.0623 

如果我使用的代碼:

n=20 #number of intervals 
max=0.03 #max value 
min=0 #min value 
width=(max-min)/n  #interval width 
hist(x,width)=width*floor(x/width)+width/2.0 

plot 'data' u (hist(\$1,width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle 

我得到正確的直方圖:

right histo

,但如果我使用條件線:

plot 'data' u (hist((\$2<=0.5?\$1:1/0),width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle 

我得到這個:

histo wrong

你可以看到,gnuplot沒有正確添加行,但他們密謀作爲單獨的列來代替。

有什麼辦法解決這個問題嗎?謝謝!

+0

這是bash「here」腳本的一部分嗎?否則,我無法弄清楚爲什麼要轉義你的「$ '' – mgilson

+0

是的,這是一個腳本,在任何情況下,這不是真正的問題,因爲轉義'$'不會影響第一個'plot'行(沒有條件的行在它裏面) – Gabriel

+0

當你嘗試將東西粘貼到gnuplot腳本中運行時,轉義'$'會產生問題;)。不用擔心。儘管我已經爲這個(相當有趣)的問題添加了1個解決方案。 – mgilson

回答

3

我懷疑這是gnuplot如何對待「缺失」數據的症狀。關於遺漏的數據,以下實際上略有不同:

plot 'data' u 1:2 w lines #connects lines across missing records 
plot 'data' u 1:($2) w lines #doesn't connect lines when a missing record is encountered 

我懷疑你看到的設計決定略有不同的症狀。 。

不幸的是它使典型gnuplot的數據過濾:-(沒用這裏幸運的是,你的條件很容易進入awk

plot "< awk '{if ($2 <= 0.5) {print $0}}' test.dat " u (hist($1,width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle 

現在的gnuplot只看到你想讓它的數據(因爲它沒有看到任何NaN值,因此它不會創建任何新的計數器)。

+0

請告訴我,如果我瞭解你寫這行的方式。對於我可以告訴它的含義:_「如果文件'test.dat'的第2列中的值<= 0.5,則計數;否則將其解除」_「。它是否正確? – Gabriel

+2

是的,awk腳本只刪除第2列元素的值大於0.5的行。 (在'awk'中,$ 0是全行,所以它是這樣寫的:'if(column2_value <= 0.5)然後打印full_line'。我認爲'awk'' print $ 0'幾乎等於一個光禿的'print',但我更喜歡前者,因爲我認爲它對發生的事情稍微更清楚(只要你知道'$ 0'代表什麼... – mgilson

+0

太好了!非常感謝@mgilson,我真的感謝你的幫助 – Gabriel