2012-03-01 15 views
6

अभी मैं ग में आ पाइप के माध्यम से gnuplot के लिए, कुछ इस तरह एक फ़ाइल गुजर रहा हूँ:पासिंग डेटा सरणी बल्कि एक फ़ाइल से ग में एक पाइप के माध्यम से gnuplot को

fprintf(gnuplotPipe, "plot \"data-file.dat\" using 1:2\n"); 

वहाँ किसी भी तरह से है कि है मैं डॉन फ़ाइल को डेटा को लिखना नहीं है और फिर इसे gnuplot पर पास करना है, उदाहरण के लिए किसी भी तरह से किसी सरणी या स्ट्रीम को gnuplot में पास करना है, इसलिए मैं लेखन को फ़ाइल प्रक्रिया में छोड़ सकता हूं और फिर फ़ाइल को हटा सकता हूं? किसी भी सहायता की सराहना की जाएगी।

उत्तर

4

निश्चित रूप से आप ऐसा कर सकते हैं। कि दो अंक एक लाइन से जुड़े हुए भूखंडों एक टर्मिनल कमांड का एक उदाहरण है:

echo "plot \"< echo -e '4 5\n 3 2'\" w lp pt 2" | gnuplot 

आप निम्नलिखित जोड़ सकते हैं आप उपसंहार उत्पादन करना चाहते हैं:

echo "set terminal postscript; plot \"< echo -e '4 5\n 3 2'\" w lp pt 2" | gnuplot &> out.ps 

अब आप का उपयोग करते हैं प्रणाली() या popen() (आउटपुट स्ट्रीम पकड़ने के लिए) बाकी सीधा होना चाहिए।

संपादित करें: - gnuplot इंटरफेस कुछ सी (++) मौजूद रही दिखती है। this website देखें जो सी, सी ++, पायथन और फोरट्रान रैपर पर एक शानदार अवलोकन प्रदान करता है। मुझे यकीन नहीं है कि वे अद्यतित हैं और नवीनतम Gnuplot संस्करणों के साथ काम करते हैं, लेकिन अगर अनुकूलन नहीं करना मुश्किल नहीं होना चाहिए। आगामी डेटा मतलब करने के लिए -

+0

उत्तर के लिए धन्यवाद, मुझे यकीन नहीं है कि मुझे आउटपुट पकड़ने की आवश्यकता क्यों होगी, शायद मैं नहीं देख रहा हूं कि आप क्या कह रहे हैं , साजिश कमांड के बाद ग्राफ स्वचालित रूप से प्रकट होता है। – mihajlv

+0

वैकल्पिक रूप से यदि आप डेटा को देखने से अधिक करने की योजना बनाते हैं। सरल साजिश प्रणाली के लिए ठीक हो जाएगा। – Azrael3000

+0

अच्छा लगता है, मैं आपके उत्तर का प्रयास करूंगा, मुझे सरणी को अपने उत्तरों से अनुमानित एक विशाल चार सरणी में परिवर्तित करना होगा, इसलिए मैं इसे gnuplot पास कर सकता हूं, जब तक कि मैं किसी भी तरह से सरणी (युगल के) को सीधे gnuplot पर पास नहीं कर सकता ? – mihajlv

0

gnuplot फ़ाइल नाम समझता है ''। तो इस समय मैं जो काम कर रहा हूं उससे कट और पेस्ट करने के लिए:

FILE *f = popen("gnuplot", "w"); 

fprintf(f, "set term png; " 
"set out 'beforeafter.png'\n" 
"set xlabel 'before'\n" 
"set ylabel 'after'\n" 
"plot '-'\n"); 

//Am using Apophenia in my project, so use its print function to print the data 
apop_data_print(dataset, .output_pipe=f); 

//or use fprintf directly 
for (int i=0; i< data_len; i++) 
    fprintf(f, "%g %g\n", data_x[i], data_y[i]); 

fclose(f);