2013-10-19 28 views
1

我正在使用gnuplot 4.6。另外,我知道在一年多前提出了一個類似的問題here。答案就是寫一個小的bash腳本。我想知道是否可以從gnuplot腳本中實現此目的,特別是當gnuplot-4.6添加了很多很酷的功能時。我想實現這樣的事情:跳過Gnuplot中的空文件

set xrange[xL:xU] 
set yrange[yL:yU] 
plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\ 
"file2.dat" using 1:2 w l lt 1 lw 1 lc 3 

我重複上述方法在迴路和xrange & yrange參數在每次迭代更新。另外,我將每次迭代的輸出保存爲一些圖像文件。現在,file2.dat保證在所有迭代中都有一些點。但這不是file1.dat。因此,我想gnuplot跳過繪製file1.dat以防萬一它爲空。請注意,如果從file1.dat沒有繪製點數,那麼對我而言完全沒問題。

這可以使用if語句輕鬆實現,前提是gnuplot中有一些命令用於檢測文件是否沒有點,而不嘗試繪製它。在這種情況下,上面的代碼會是這個樣子:

set xrange[xL:xU] 
set yrange[yL:yU] 
if ("file.dat" not empty){ 
plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\ 
    "file2.dat" using 1:2 w l lt 1 lw 1 lc 3 
}else { 
plot "file2.dat" using 1:2 w l lt 1 lw 1 lc 3 
} 

請幫我制定上述if聲明'condition'

感謝&乾杯

阿比納夫

+0

如果文件存在,仍然無法使用僅限gnuplot的方法進行檢查。你需要一些輔助腳本來做到這一點。但爲什麼它是一個問題?情節命令會發出警告,並說明它。 – Christoph

+0

這是一個問題,因爲即使一個文件沒有範圍內的點,我仍然想繪製其他文件,它具有範圍內的點。 – Abhinav

+0

你是對的!我認爲'plot'命令只會跳過丟失的文件,但它不會。 – Christoph

回答

0

我找不到那個只用gnuplot命令的任何黑客行爲。因此,我發佈了一項工作,該工作需要shell的幫助來查找file1.dat是否有任何數據行。

gnuplot腳本文件中的條件將是這樣的:

if(system("awk '{x++}END{ print x}' file1.dat")>0){ 
    plot "file1.dat" using 1:2 w l lt 1 lw 1 lc 3,\ 
    "file2.dat" using 1:2 w l lt 1 lw 1 lc 3 
}else{ 
    plot "file2.dat" using 1:2 w l lt 1 lw 1 lc 3 
} 

我仍然會很感激,如果任何人都可以給我一個gnuplot命令唯一方法。