का उपयोग करके emacs से अनुक्रमिक रूप से डेटा प्लॉट करना मान लें कि मेरे पास कुछ डेटा (विशिष्ट होने वाला वेक्टर) है। क्या मैं अनुक्रमिक रूप से जीनप्लॉट का उपयोग कर तत्व द्वारा तत्व को प्लॉट कर सकता हूं जैसे ऐसा लगता है कि यह वास्तविक जीवन संकेत है जिसे मॉनीटर के माध्यम से देखा जा रहा है?सामान्य लिस्प और ग्नुपलॉट
मुझे पता है कि मैं सामान्य लिस्प का उपयोग करके एक संपूर्ण फ़ाइल को टेक्स्ट फ़ाइल में लिख सकता हूं, फिर gnuplot का उपयोग करके मैं इसे बैच प्रारूप में प्लॉट कर सकता हूं। मुझे जो चाहिए वह यह है कि मैं अपनी साजिश पर एक बिंदु डालना चाहता हूं क्योंकि डेटा अनुक्रमिक रूप से आता है।
डेटा लूप के अंदर शायद उत्पन्न किया जाएगा, इस प्रकार आप एक्स-अक्ष को पूर्णांक मूल्यवान पृथक-समय अक्ष के रूप में मान सकते हैं। तो लूप में यदि सरणी का पहला तत्व 5 के रूप में उत्पन्न होता है, तो मैं अपनी साजिश पर एक बिंदु (0,5) डालना चाहता हूं। फिर यदि दूसरा तत्व 3 के रूप में उत्पन्न होता है, तो मैं अपनी साजिश पर एक और बिंदु (1,7) (पुराने डेटा बिंदु को संरक्षित करना) रखना चाहता हूं। इसलिए जब मैं लूप के माध्यम से पुन: प्रयास करता हूं, तो मैं अनुक्रमिक रूप से डेटा प्लॉट करता हूं।
मैं अपने उद्देश्यों के लिए एमएक्स और कॉमन लिस्प का उपयोग कर रहा हूं और मैं इन उपकरणों के भीतर रहने वाले इस डेटा को प्लॉट करना चाहता हूं। अगर ग्नुपॉट के अलावा कोई अन्य विकल्प है, तो मैं उन्हें सुनना चाहता हूं।
यदि यह आसानी से संभव नहीं है, तो यह अच्छा होगा, अगर मैं कुछ सामान्य Lisp कमांड द्वारा एक Gnuplot कमांड फ़ाइल चला सकता हूं।
संपादित करें:
के बाद सलाह लोग इस सूत्र के तहत दिया था, मैं cgn
जो ltk
का उपयोग करता है का उपयोग कर एक कोड लिखा था।
अभी मैं अपनी स्क्रीन पर पूर्व-निर्दिष्ट स्थितियों पर दो x11 विंडो खोलता हूं और मैं लूप दर्ज करता हूं। लूप में प्रत्येक बार जब मैं एक स्ट्रीम खोलता हूं और :if-exists :append
विकल्प के साथ टेक्स्ट फ़ाइल trial.txt पर डेटा (20 हर्ट्ज पर नमूना 0.25 हर्ट्ज की साइन और कोसाइन तरंगें) लिखता है और स्ट्रीम बंद करता है। फिर प्रत्येक पुनरावृत्ति पर मैं format-gnuplot
कमांड के माध्यम से gnuplot का उपयोग कर पूरा डेटा प्लॉट करता हूं। यह कोड मुझे पूर्व-निर्दिष्ट एक्स और वाई श्रेणियों की दो खिड़कियां देता है और फिर कोई खिड़कियों में उपरोक्त साइन और कोसाइन तरंगों के विकास को देख सकता है।
जैसा कि मैंने पहले कहा है कि मेरे पास मजबूत प्रोग्रामिंग पृष्ठभूमि नहीं है (मैं एक विद्युत अभियंता हूं जो किसी भी तरह से सामान्य लिस्प का उपयोग समाप्त कर देता है) और मुझे पूरा यकीन है कि मेरा कोड गैर-इष्टतम और अनूठा है। अगर आपके पास कुछ और सलाहएं हैं, सुधार आदि। मैं वास्तव में उन्हें सुनना चाहूंगा। कोड यहां है:
(setf filename "trial.txt")
(setf path (make-pathname :name filename))
(setf str (open path :direction :output :if-exists :supersede :if-does-not-exist :create))
(format str "~,4F ~,4F" -1 -1)
(close str)
;start gnuplot process
(start-gnuplot "/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot")
;set 2 x11 windows with the following properties
(format-gnuplot "cd ~S" "Users/yberol/Desktop/lispbox/code")
(format-gnuplot "set terminal x11 0 position 0,0")
(format-gnuplot "set xrange [0:10]")
(format-gnuplot "set yrange [-1:1]")
(format-gnuplot "unset key")
(format-gnuplot "set grid")
(format-gnuplot "plot ~S using 1" filename)
(format-gnuplot "set terminal x11 1 position 800,0")
(format-gnuplot "plot ~S using 2" filename)
;write data into text
(loop :for i :from 0 :to 10 :by (/ 1 20) :do
(setf str (open path :direction :output :if-exists :append :if-does-not-exist :create))
(format str "~,4F ~,4F ~,4F ~%" i (sin (* 2 pi (/ 5 20) i)) (cos (* 2 pi (/ 5 20) i)))
(close str)
(format-gnuplot "set terminal x11 0")
(format-gnuplot "plot ~S using 1:2 with lines" filename)
(format-gnuplot "set terminal x11 1")
(format-gnuplot "plot ~S using 1:3 with lines" filename)
(sleep 0.1))
(close-gnuplot)
बहुत बहुत धन्यवाद।
तो तुम एक खाली खिड़की चाहते हैं के साथ इंटरफ़ेस के लिए एक काम कर कॉमन लिस्प समाधान है, और फिर, बिंदु के बाद बिंदु अपने सभी डेटा प्रदर्शित करने के बीच देरी से प्रदर्शित किया जाता बिंदु एन और बिंदु एन + 1, एक सेकंड कहो, क्या मैं आपके प्रश्न को सही समझ रहा हूं? –
बिल्कुल, 1 सेकंड या मेरे डेटा टीएस सेकेंड की नमूना दर के आधार पर। – YBE
जब तक मुझे गलती नहीं होती है, यह इमाक्स के साथ मुश्किल से कुछ नहीं है, है ना? वैकल्पिक समाधान के लिए, आप इस पर विचार कर सकते हैं, जैसा कि [सीवी थ्रेड] (http://stats.stackexchange.com/q/6021/930) पर दिखाया गया है। अगर मैं सीएल/gnuplot में एक उचित समाधान के बारे में सोच सकता हूं, तो मैं इसे पोस्ट करूंगा। उत्तर के लिए – chl