साथ मुझे लगता है कि इस अजगर के साथ साथ matplotlib का उपयोग कर सबसे आसान प्राप्त किया जा सकता। इसे प्राप्त करने के लिए वास्तव में कई तरीके हैं: ए) सीधे अपने सी अनुप्रयोग में Python Interpreter को एकीकृत करना, बी) डेटा को प्रिंट करना और इसे सरल साजिश करने वाली एक साधारण पायथन स्क्रिप्ट पर पाइप करना। निम्नलिखित में मैं दोनों दृष्टिकोणों का वर्णन करूंगा।
हमारे पास निम्नलिखित सी अनुप्रयोग है (उदा। plot.c
)। यह matplotlib की साजिश कार्यक्षमता के साथ इंटरफेस करने के लिए पाइथन दुभाषिया का उपयोग करता है। एप्लिकेशन डेटा को सीधे साजिश करने में सक्षम है (जब ./plot --plot-data
कहा जाता है) और डेटा को stdout
पर प्रिंट करने के लिए (जब किसी अन्य तर्क सेट के साथ बुलाया जाता है)।
#include <Python.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define CMD_BUF_SIZE 256
void initializePlotting() {
Py_Initialize();
// load matplotlib for plotting
PyRun_SimpleString("from matplotlib import pyplot as pp");
PyRun_SimpleString("pp.ion()"); // use pp.draw() instead of pp.show()
}
void uninitializePlotting() {
Py_Finalize();
}
void plotPoint2d(double x, double y) {
// this buffer will be used later to handle the commands to python
static char command[CMD_BUF_SIZE];
snprintf(command, CMD_BUF_SIZE, "pp.plot([%f],[%f],'r.')\npp.draw()", x, y);
PyRun_SimpleString(command);
}
double myRandom() {
double sum = .0;
int count = 1e4;
int i;
for (i = 0; i < count; i++)
sum = sum + rand()/(double)RAND_MAX;
sum = sum/count;
return sum;
}
int main (int argc, const char** argv) {
bool plot = false;
if (argc == 2 && strcmp(argv[1], "--plot-data") == 0)
plot = true;
if (plot) initializePlotting();
// generate and plot the data
int i = 0;
for (i = 0; i < 1000; i++) {
double x = myRandom(), y = myRandom();
if (plot) plotPoint2d(x,y);
else printf("%f %f\n", x, y);
}
if (plot) uninitializePlotting();
return 0;
}
आप इस तरह यह निर्माण कर सकते हैं:
$ gcc plot.c -I /usr/include/python2.7 -l python2.7 -o plot
और इसे पसंद चलाएँ:
$ ./plot --plot-data
तो यह एक धुरी पर लाल बिंदु की साजिश रचने कुछ समय के लिए चलेंगे।
जब आप सीधे डेटा प्लॉट करने के लिए नहीं है, लेकिन stdout
आप एक बाहरी प्रोग्राम के द्वारा साजिश कर सकते हैं (उदाहरण के लिए plot.py
नाम के एक अजगर स्क्रिप्ट) कि stdin
से इनपुट लेता है, यानी एक पाइप के लिए इसे मुद्रित करने के लिए चुनते हैं, और भूखंडों डेटा यह हो जाता है। प्राप्त करने के लिए इस तरह ./plot | python plot.py
प्रोग्राम कहते हैं, plot.py
के समान होने के साथ:
from matplotlib import pyplot as pp
pp.ion()
while True:
# read 2d data point from stdin
data = [float(x) for x in raw_input().split()]
assert len(data) == 2, "can only plot 2d data!"
x,y = data
# plot the data
pp.plot([x],[y],'r.')
pp.draw()
मैं अपने डेबियन मशीन पर दोनों दृष्टिकोण का परीक्षण किया है। इसे स्थापित करने के लिए python2.7
और python-matplotlib
पैकेजों की आवश्यकता है।
संपादित
मैं सिर्फ देखा है, कि तुम एक बार साजिश या इस तरह बात प्लॉट करने के लिए चाहता था, निश्चित रूप से यह भी संभव का उपयोग कर matplotlib, उदा हैएक हिस्टोग्राम:
from matplotlib import pyplot as pp
pp.ion()
values = list()
while True:
data = [float(x) for x in raw_input().split()]
values.append(data[0])
pp.clf()
pp.hist([values])
pp.draw()
उपकरण का लिंक कहां है? – Hossein
आप किस तरह का सांख्यिकीय ग्राफ प्लॉट करना चाहते हैं? लाइवग्राफ केवल x/y लाइन ग्राफ़ का समर्थन करता है, लेकिन जब तक आप फ़ाइल को सही प्रारूप में लिखते हैं, तो यह आपके ग्राफ को दिखाने में सक्षम होना चाहिए। – tinman
मेरे पास एक डेलगर फ़ाइल है। यह प्रारूप है .txt और इसमें एक पंक्ति में संख्याएं हैं। (2,4 5,3 10,1 आदि) मैं इस फ़ाइल का उपयोग ऐसे प्रोग्राम में करना चाहता हूं जो इसे – ozgur