C++で簡単にグラフをプロットしよう
matplotlib
を使ってみよう
環境
OS | コンパイラ | python |
---|---|---|
Ubuntu 20.04 | gcc 9.4.0 | Python 3.8 |
さて、やっていこう
ここでは簡単な紹介に留めさせていただく
いくらでも書いてる人はいるからね
さて、ここでは簡単に導入などを説明する
まずは任意のライブラリ用のディレクトリに移動して
$ git clone https://github.com/lava/matiplotlib-cpp.git
終わり
簡単だね
これはヘッダオンリーライブラリだからヘッダをインクルードすればおk
#include<matplotlibcpp.h>
これで使えるようになった
さて、簡単にグラフをプロットしてみよう
// pyplot.cpp #include<matplotlib-cpp/matplotlibcpp.h> #include<vector> namespace plt = matplotlibcpp; int main(){ std::vector<int> x(100), y(100); for(int i = 0; i < x.size(); i++){ x.at(i) = i; y.at(i) = x.at(i)*x.at(i); } plt::plot(x, y); plt::save("./target.png"); return 0; }
こんな感じになる
ちなみにコンパイルするときは
$ g++ -c pyplot.cpp -lpython3.8 -I/usr/include/python3.8 -I ~/project/includes/ $ g++ pyplot.o -o pyplot -lpython3.8 -I/usr/include/python3.8 -I ~/project/includes/
makefileだと
TARGET = pyplot CC = g++ CFLAGS = -O2 -std=c++2a -Wall SRCS = pyplot.cpp OBJS = $(SRCS:%.cpp=%.o) INC = -I/usr/include/python3.8 -I ~/project/includes/ LIB = -lpython3.8 .PHONY: all clean all:$(TARGET) $(TARGET):$(OBJS) $(CC) $^ -o $@ $(LIB) $(CFLAGS) $(INC) .cpp.o: $(CC) -c $^ $(LIB) $(INC) $(CFLAGS) clean: rm -f *.o pyplot
-lpython3.8
というように静的なファイルをリンクする必要がある
自分の手元のpythonのバージョンを確認しましょう
クローンもとのリポジトリではpython2.7を使ってるけどまぁpython3.8でいけたので大体どのバージョンでもいけるだろう
matplotlibの機能は他にもあるので調べてみてもいいだろう
予告: Serial Portの入力をプロットできるようにするのでお楽しみに