2012-05-21 65 views
0

送過來給gnuplot的程序保存命令我是新來GNUPLOT。我正在使用Unix。使用Gnuplot-PY包

我看到的命令/錯誤和他們的終端輸出,但我想他們也保存在一個文件存儲的目的。

有在gnuplot的保存命令,但它不僅節省了模塊和最終設置最後給出的情節或splot命令。

想我繪製與設置「A」,做一些計算後的線路我去重新繪製另一條線與設置「B」

gnuplot.save()命令只保存最後命令和最新設置。我怎樣才能保存所有發出的命令?

請幫忙...

+0

你可以使用matplotlib完全在python中繪製你的圖。 –

回答

0

非python的回答是使用`script'命令。

1

我不是非常熟悉的gnuplot-PY - 但如果它寫入命令到終端,因爲它執行它們,你可以使用shell重定向:

python myPythonScriptWithGnuplot.py > commandfile.gp #redirect stdout 
python myPythonScriptWithGnuplot.py 2> commandfile.gp #redirect stderr 

當然,此次榮獲」牛逼的幫助,如果你在寫其他的東西,從蟒蛇終端...

但是請注意,gnuplot的-PY將通過臨時的FIFO GNUPLOT數據(我想反正)。所以,如果用戶要打印的數據(如列表,numpy的陣列,等等......像"sin(x)"不是功能),當您嘗試繪圖數據時,FIFO將被從系統中清除,你的繪圖命令就會失敗抱怨它找不到數據文件。

編輯

後(快速)查看源代碼,看來你有幾種選擇。您的第一個選項:將debug=1傳遞給構造函數(您可能已經這樣做了)。這將導致命令被寫入標準錯誤。用一點(或很多)shell魔法,你可以分離出不同的輸出流。這裏有一個配方,可以將stderr從一個命令放入一個文件中,同時仍然在終端上輸出bash中的輸出(我使用bash 4.1.5 - 但我確定這已經存在了一段時間):

((command 3>&1 1>&2 2>&3) | tee command_stderr.log) 3>&1 1>&2 2>&3 
      #swap stderr/out 
          #tee puts data in output file and to terminal 
                 #swap stderr/stdout again. 

(我喜歡看到一個更清潔的方式,如果有人知道它這樣做的輸出流交換...)

或者,你可以將文件名傳遞給Gnuplot構造。這會將命令寫入該文件。據我所知,沒有辦法允許你寫文件和gnuplot管道的命令。但是,您始終可以啓動多個Gnuplot實例,並通過主實例將命令寫入文件,然後每當寫入繪圖命令時,都會將第二個實例告訴load "filename"。當然,如果你使用這種方法,你應該指定該數據應該是inline d。

第三個選擇是放棄gnuplot-py,轉而使用pyGnuplot,因爲我仍然在積極開發那個 - 然後如果某件事不起作用,或者您想添加一個功能,您可以讓我知道;)

+0

重定向會起作用,但我也想在終端上顯示我的結果。 – varun

+0

@varun:我與您可以處理輸出流,使其*希望*離開終端上的命令,也把它們放到供將來參考文件的方式編輯。 – mgilson