2011-02-12 45 views
12

我想有一個.plt文件存儲數據和gnuplot命令。我的數據看起來像如何從gnuplot中的相同標準輸入數據製作幾張圖?

# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 

並對應於兩個圖:(x1,y1)和(x2,y2)。

我知道我可以使用"-"像:

plot "-" using 1:2 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

但是,這將產生只有一個情節,即(X1,Y1)。我試圖做類似

plot "-" using 1:2, "-" using 3:4 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

但很明顯,因爲gnuplot的預計,第二"-"一組新的從標準輸入數據不起作用。

注:

  1. 我不能改變數據的樣式。它分爲四欄。
  2. 看來我可以用reread做到這一點,但需要兩個文件。我真的只想要一個文件。

回答

7

你不能在不修改有關事情的方式做到這一點你輸入數據。當通過標準輸入提供gnuplot數據時,它希望多個數據集在它們之間用兩條空行分隔,或者在連續行上交錯排列。選項有:

  • 將兩個數據集合放入不同的 繪圖命令中。

  • 更改 文件格式,使數據集之間有 空行,然後 引用它們所有指數

  • 改變文件格式,以便 交替線表示不同 數據集,然後引用它們所有 與

  • 把數據分成一個 文件,繪圖腳本成 另一個,然後引用該數據 文件多於一次具有不同 每次使用條款。

有一個介紹到指數命令開始How do I plot several data sets in a single file?這些是gnuplot爲這類事情建立的唯一設施,也不完全是你所問的。你已經修改了數據格式是很好的,因爲這不會像你原先希望的那樣工作。

4

我不知道多少,你可以編輯該文件,但整潔的方法可能是把整個事情在shell腳本/批處理腳本(你在Linux或Windows?)

在Linux上我做這樣的事情

#!/bin/bash 

#put my data in a file 
echo " 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
" > my_dat.dat 

#launch gnuplot 
gnuplot<<EOF 
#gnuplot commands here 
set output "test.ps" 
set term postscript 

plot "my_dat.dat" u 1:2, \ 
    "my_dat.dat" u 3:4 

set term pop 
set output 

EOF 

# cleanup 
rm my_dat.dat 

然後我使用chmod + WRX我把上面的命令在文件並運行。

注:也有似乎是一個相似於這樣一個問題:

gnuplot stdin, how to plot two lines?

所以,你可能想看看有太多

+0

感謝。是的,我在Linux上。實際上,我設法通過修改生成它的C++代碼來改變數據的格式。所以我的問題現在已經消失了。但是我仍然很好奇如何才能做到這一點,以便我可以看到上面格式的單個file.plt的情節,併發出'$ gnuplot file.plt`。 – Mahdiyar 2011-02-14 04:36:21

+0

@Mahdiyar是的,我也很好奇。通過腳本使用gnuplot是我認爲的常用方式(您也可以從shell中調用您的C++程序,從而使整個工作可以使用1行),請參閱 - http://t16web.lanl.gov/Kawano/gnuplot/intro/working -e.html瞭解更多信息。 – Tom 2011-02-14 08:53:36

1

我知道這是一個古老的職位,但我想指出的另一個策略的情況下,別人還是這個問題的鬥爭:

你也可以用你的繪圖命令,輸入數據的兩倍,如:

plot "-" using 1:2, "-" using 3:4 
# 1 2 3 4 
    5 6 7 8 
    e 
    1 2 3 4 
    5 6 7 8 
    e 

在這種情況下,Gnuplot實際上將等待兩個塊。當我不想改變命令並且當我通過管道輸送Gnuplot時,我發現這非常有用。在實時情況下(取決於數據大小),這很可能比緩衝到硬盤驅動器上的文件更快。

根據我的經驗,緩衝腳本中的數據所需的代碼量非常低,而這些代碼需要多次管道化。因爲gp5.0

2

新選項(也help inline data見):

$dataset << EOD 
1 2 3 4 
5 6 7 8 
EOD 

plot $dataset using 1:2, $dataset using 3:4 
相關問題