してコンパイルします。これを実現するには実際には複数の方法があります:a)Python InterpreterをCアプリケーションに直接組み込み、b)データをstdoutに出力し、実際のプロットを行う単純なpythonスクリプトにパイプします。以下では、両方のアプローチについて説明します。
次のCアプリケーション(例:plot.c
)があります。 Pythonインタプリタを使用して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
をという名前のPythonスクリプト)stdin
から入力を受け取り、すなわちパイプにそれを印刷しないことを選択し、プロットそれが得られるデータ。私は私のDebianマシン上で両方のアプローチをテストしている
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()
:これはplot.py
がに似ていると、./plot | python plot.py
のようなプログラムを呼び出す達成するために 。パッケージpython2.7
とpython-matplotlib
がインストールされている必要があります。私は、例えば、もちろんこれはmatplotlibのを使用しても可能であり、あなたがバープロットまたはそのようなことをプロットしたかったことを、見てきました
EDIT
ヒストグラム:
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
どのような統計グラフをプロットしますか? LiveGraphはx/y線グラフのみをサポートしているようですが、正しい形式でファイルに書き込む限り、グラフを表示できるはずです。 – tinman
私はデータロガーファイルを持っています。形式は.txtで、行に数字があります。 (2,4,5,3 10,1など) 私はこのファイルをプログラムで使いたい – ozgur