मैं gnuplot के बारे में कुछ और खोजते समय इस पर आया। भले ही यह एक पुराना सवाल है, मैंने सोचा कि मैं कुछ नमूना कोड का योगदान दूंगा। मैं इसे अपने कार्यक्रम के लिए उपयोग करता हूं, और मुझे लगता है कि यह एक सुंदर साफ नौकरी करता है। AFAIK, यह PIPEing केवल यूनिक्स सिस्टम पर काम करता है (विंडोज उपयोगकर्ताओं के लिए नीचे संपादित देखें)। मेरा gnuplot स्थापना उबंटू भंडार से डिफ़ॉल्ट स्थापना है।
#include <stdlib.h>
#include <stdio.h>
#define NUM_POINTS 5
#define NUM_COMMANDS 2
int main()
{
char * commandsForGnuplot[] = {"set title \"TITLEEEEE\"", "plot 'data.temp'"};
double xvals[NUM_POINTS] = {1.0, 2.0, 3.0, 4.0, 5.0};
double yvals[NUM_POINTS] = {5.0 ,3.0, 1.0, 3.0, 5.0};
FILE * temp = fopen("data.temp", "w");
/*Opens an interface that one can use to send commands as if they were typing into the
* gnuplot command line. "The -persistent" keeps the plot open even after your
* C program terminates.
*/
FILE * gnuplotPipe = popen ("gnuplot -persistent", "w");
int i;
for (i=0; i < NUM_POINTS; i++)
{
fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]); //Write the data to a temporary file
}
for (i=0; i < NUM_COMMANDS; i++)
{
fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]); //Send commands to gnuplot one by one.
}
return 0;
}
संपादित
अपने आवेदन में, मैं भी समस्या यह है कि साजिश जब तक बुला कार्यक्रम बंद कर दिया है प्रकट नहीं होता है में फंस गयी। इसे पाने के लिए, fprintf
का उपयोग करने के बाद इसे अपना अंतिम आदेश भेजने के लिए fflush(gnuplotPipe)
जोड़ें।
मैंने यह भी देखा है कि विंडोज उपयोगकर्ता popen
के स्थान पर उपयोग कर सकते हैं - हालांकि मैं इसकी पुष्टि नहीं कर सकता क्योंकि मेरे पास विंडोज़ स्थापित नहीं है।
संपादित 2
एक plot '-'
आदेश वर्ण "e" के बाद डेटा बिंदुओं के बाद gnuplot भेजकर एक फ़ाइल पर लिखने में होने से बचने कर सकते हैं।
उदा।
fprintf(gnuplotPipe, "plot '-' \n");
int i;
for (int i = 0; i < NUM_POINTS; i++)
{
fprintf(gnuplotPipe, "%lf %lf\n", xvals[i], yvals[i]);
}
fprintf(gnuplotPipe, "e");
हो सकता है कि 'system' समारोह की जाँच करें। – sje397