質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4566閲覧

matplotlib-cpp を Visual Studio Code で使いたいが,エラーが解消されない。

kakitamasziru

総合スコア5

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/09/23 15:41

編集2021/09/23 17:44

実現したいこと

PythonではなくC++で点やグラフの描画がしたいと思い,そのような機能を探してみると,matplotlib-cppという有志によるライブラリが見つかりました。Pythonにあるmatplotlibを基にしており,それを使いたいと思い,当GitHub(https://github.com/lava/matplotlib-cpp)内のInstallationを参考にし,手元の Visual Studio Code で設定を試みましたが,エラーが出ました。
現状とそれまでの流れを説明させていただきます。
matplotlibcpp.h/usr/include 内に保存し,c_cpp_properties.json 内のインクルードパスに "/usr/include/**" を追加することで,#include "matplotlibcpp" のエラーを解消しました。
matplotlibcpp.h でエラーが発生:#include <Python.h> 及び #include <numpy/arrayobject.h>include path を更新してください。そこで,Cドライブ内にある Python39 フォルダ内の拡張子が.hであるファイル全てと,numpyフォルダ内の拡張子が .h であるファイル全てを /usr/include 内にコピペしました。
③ ②で発生したエラーは解消されましたが,clustering.cpp をコンパイルすると,(WSL環境でVisual Studio Codeを動かしており,コンパイルコマンドは g++ clustering.cpp です。)エラーメッセージが表示され,そこからが解決できていません。


直接的に上と関係あるかどうかは不明ですが,もう一つ気になる点としては,Pythonで,matplotlibを用いて描画を試みたところ,Python 3.9.5の実行環境(上記のPython39のフォルダ内のexeファイルで実行)では正常に動作したものの,Python 3.8.10 及び Python 3.9.7 の実行環境では,import numpy as np の時点で以下のようなエラーが発生しました。これは関係ありますでしょうか?

Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy'

発生している問題・エラーメッセージ

③で発生したエラーメッセージ
ttps://writening.net/page?fpcrQ2
長く,投稿字数制限に引っ掛かってしまったため,上のリンクで全文が見られるようにしました。申し訳ございません。(hを先頭につけてください。)

該当のソースコード

clustering.cpp

C++

1#include "matplotlibcpp.h" 2#include <iostream> 3using namespace std; 4 5namespace plt = matplotlibcpp; 6 7int main() { 8 plt::plot({1,3,2,4}); 9 plt::show(); 10}

また,非常に長いためここでは割愛していますが,GitHubで公開されている matplotlibcpp.h を該当のソースコードではインクルードしています。

参考にさせてもらったもの

https://trap.jp/post/1080/
https://gammasoft.jp/blog/install-numpy-pandas-matplotlib-by-pip/
https://teratail.com/questions/312442

補足情報(FW/ツールのバージョンなど)

c_cpp_properties.json

C++

1{ 2 "configurations": [ 3 { 4 "name": "WSL", 5 "includePath": [ 6 "${workspaceFolder}/**", 7 "/usr/include/**" 8 ], 9 "defines": [ 10 "_DEBUG", 11 "UNICODE", 12 "_UNICODE" 13 ], 14 "compilerPath": "/usr/bin/gcc", 15 "cStandard": "c11", 16 "cppStandard": "c++17", 17 "intelliSenseMode": "gcc-x64" 18 } 19 ], 20 "version": 4 21}

Python のバージョン:2.7.17 (Ubuntu上で python --version のコマンドを用いて確認しました)

他に記述した方が良い情報がありましたら,教えてくださると助かります。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/09/23 20:13

> WSL環境でVisual Studio Codeを動かしており,コンパイルコマンドは g++ clustering.cpp です。 WSL上のUbuntu側でコンパイルしてるのなら、 https://github.com/lava/matplotlib-cpp の「Installation」に書かれてる「sudo apt-get install…」をUbuntuで実行しておけば、 > ②matplotlibcpp.h でエラーが発生:#include <Python.h> 及び #include <numpy/arrayobject.h> で include path を更新してください。 とはならないと思うのですが、それやってますでしょうか? ただし、実行時の「python-matplotlib python-numpy python2.7-dev」は、使いたいPythonライブラリのバージョンに合わせて変える必要があります たとえばPython 3.9を使うなら、「python3-matplotlib python3-numpy python3.9-dev」とします また、上記コマンドを実行する前に、 > Cドライブ内にある Python39 フォルダ内の拡張子が.hであるファイル全てと,numpyフォルダ内の拡張子が .h であるファイル全てを /usr/include 内にコピペしました。 でコピーしたファイルは、全部削除しておいた方がいいです
jbpb0

2021/09/23 20:23

> ③で発生したエラーメッセージ ですが、 https://github.com/lava/matplotlib-cpp の「Usage」の、「Result:」のすぐ上の「g++…」の最後に「-lpython2.7」というのが付いてますよね > コンパイルコマンドは g++ clustering.cpp ではそれ付けて無いので、エラーが出てるのだと思います ただし、「-lpython2.7」の数字は、上のコメントに書いた「python数字-dev」に合わせる必要があります 「python3.9-dev」としたなら、それに合わせて「-lpython3.9」とします
kakitamasziru

2021/09/24 15:11 編集

返信ありがとうございます。 仰られた通りにpython2.7で試しに動かしてみたところ,③のエラーが解消されました。ありがとうございます。 VSCode上でコンパイルは通ったものの,実行時に ``` Exception _tkinter.TclError: 'no display name and no $DISPLAY environment variable' in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored ``` というエラーメッセージが出て,環境変数の問題だと思い,検索したところ,/etc/matplotlibrc 内の backend をTkAggからAggに変えるとよいとの内容が出てきました(https://qiita.com/syuuu/items/d24d00d63a5b181549ac)ので,その通りにしたところ,実行時のエラーメッセージも消え,無事実行できたかのように思われました。 しかし,描画の画面が開かれることはありませんでした…。 まだPython側の設定で見落としているところがあるのでしょうか…? UbuntuやPythonについては全くの素人でして,手間をおかけして申し訳ありません。 追記: どうやらAggだとGUIでの処理ができない(?)ようで,TkAggのままで良いようです。Ubuntuにubuntu-desktopをインストールし,TkAggに直して再試行しましたが,結局上のエラーメッセージが出てしまいました。
guest

回答1

0

ベストアンサー

WSL環境でVisual Studio Codeを動かしており,コンパイルコマンドは g++ clustering.cpp です。

WSL上のUbuntu側でコンパイルしてるのなら、
matplotlib-cpp
の「Installation」に書かれてる「sudo apt-get install...」をUbuntuで実行して、「Usage」の「Result:」のすぐ上の「g++...」のようにコンパイル時に「-I/usr/include/python2.7」を付ければ、

②matplotlibcpp.h でエラーが発生:#include <Python.h> 及び #include <numpy/arrayobject.h> で include path を更新してください。

とはならないと思います

ただし、上記コマンドを実行する前に、

Cドライブ内にある Python39 フォルダ内の拡張子が.hであるファイル全てと,numpyフォルダ内の拡張子が .h であるファイル全てを /usr/include 内にコピペしました。

でコピーしたファイルは、全部削除しておいた方がいいです

 .

③で発生したエラーメッセージ

ですが、
matplotlib-cpp
の「Usage」の、「Result:」のすぐ上の「g++...」の最後に「-lpython2.7」というのが付いてますよね

コンパイルコマンドは g++ clustering.cpp

ではそれ付けて無いので、エラーが出てるのだと思います

投稿2021/09/25 09:48

編集2021/09/25 10:11
jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakitamasziru

2021/09/25 09:57

質問と回答で仰られた通りにしたところ,正常に動作しました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問