[C.C++] 【C++】11 Visual Studio 2019 C++安装matplotlib-cpp绘图

371 0
Honkers 2026-4-3 22:56:30 来自手机 | 显示全部楼层 |阅读模式

作者简介

很高兴认识您!
我叫卢家波,河海大学水文学及水资源博士研究生,研究兴趣为高效洪水淹没预测、洪水灾害预警、机器学习、替代模型和降阶模型。
变化环境下,极端洪水事件多发,我希望能通过研究为水灾害防御做出贡献,为人民服务。
欢迎交流讨论和研究合作,vx Jiabo_Lu
主页 https://lujiabo98.github.io
简历 https://lujiabo98.github.io/file/CV_JiaboLu_zh.pdf
博客 https://blog.csdn.net/weixin_43012724?type=blog
来信请说明博客标题及链接,谢谢。

目的

2022/4/8

本地目录:E:\Master\study\Cpp\Plot

想用C++实现Python、Matlab、R语言那样便捷的绘图,网上搜了一圈,发现有给Python的matplotlib做了C++接口的第三方库,于是尝试下载使用。

过程

花了一天时间,完成了配置。

主要参考了三篇博客:
VS项目中配置matplotlib-cpp绘制图片
VisualStudio2019 c++安装matplotlib-cpp
c++调用matplotlib一

配置

  1. 包含头文件及命名空间

    1. #include "matplotlibcpp.h"
    2. namespace plt = matplotlibcpp;
    复制代码
  2. 项目属性 → \rightarrow → 配置:所有配置 → \rightarrow → 平台:所有平台 → \rightarrow → C/C++ → \rightarrow → 常规 → \rightarrow → 附加包含目录 → \rightarrow → 添加python include文件夹和numpy include文件夹的位置

    1. C:\Users\LJB\AppData\Local\Programs\Python\Python38-32\include
    2. C:\Users\LJB\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\numpy\core\include
    复制代码
  3. 项目属性 → \rightarrow → 链接器 → \rightarrow → 常规 → \rightarrow → 附加库目录 → \rightarrow → 添加python libs文件夹的位置

    1. C:\Users\LJB\AppData\Local\Programs\Python\Python38-32\libs
    复制代码
  4. 项目属性 → \rightarrow → 链接器 → \rightarrow → 输入 → \rightarrow → 添加依赖项 → \rightarrow → 添加libs文件夹内的.lib文件

    1. python3.lib
    2. python38.lib
    3. _tkinter.lib
    复制代码
  5. 项目属性 → \rightarrow → 常规 → \rightarrow → C++语言标准 → \rightarrow → ISO C++ 17标准 或 以上

遇到的问题

1

std::stod这句话会报错,原因是系统报std不包含stod函数。

第一篇博客里都提了解决办法,但是这个问题的原因是matplotlibcpp.h文件忘记包含string头文件了,添加即可

  1. #include <string>
复制代码

2

  1. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyFunction_Type
  2. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyImport_ImportModule
  3. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyExc_RuntimeError
  4. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyTuple_New
  5. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyDict_SetItemString
  6. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyFloat_FromDouble
  7. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyExc_AttributeError
  8. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyErr_SetString
  9. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyErr_Format
  10. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_Py_Finalize
  11. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_Py_SetProgramName
  12. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp__Py_Dealloc
  13. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_Py_Initialize
  14. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyCapsule_GetPointer
  15. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyList_New
  16. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyObject_GetAttrString
  17. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyDict_New
  18. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyObject_CallMethod
  19. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyTuple_SetItem
  20. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PySys_SetArgv
  21. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyObject_CallObject
  22. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyImport_Import
  23. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyCapsule_Type
  24. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyExc_ImportError
  25. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyList_SetItem
  26. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyErr_Print
  27. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyUnicode_FromString
  28. 1>Plot.obj : error LNK2001: 无法解析的外部符号 __imp_PyObject_Call
  29. 1>E:\Master\study\Cpp\Plot\x64\Release\Plot.exe : fatal error LNK1120: 28 个无法解析的外部命令
复制代码

这个是由于测试程序的配置是x64,而我安装的是32位的Python,因此不能匹配,所以两种解决思路:

  1. 安装64位Python
  2. 配置改为x86

3

还要注意用Vcpkg安装matplotlib-cpp时,选择对应版本安装
默认安装32位

  1. .\vcpkg install matplotlib-cpp
复制代码

这样是安装64位

  1. .\vcpkg install matplotlib-cpp:x64-windows
复制代码

如果下载慢,可以先下载,再编译
默认安装32位

  1. .\vcpkg install matplotlib-cpp --only-downloads
  2. .\vcpkg install matplotlib-cpp
复制代码

这样是安装64位

  1. .\vcpkg install matplotlib-cpp:x64-windows --only-downloads
  2. .\vcpkg install matplotlib-cpp:x64-windows
复制代码

最终成功

测试代码

本地目录:E:\Master\study\Cpp\Plot
Plot.cpp:

  1. // Plot.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //
  3. #include <iostream>
  4. #include "matplotlibcpp.h"
  5. namespace plt = matplotlibcpp;
  6. int main() {
  7. int n = 1000;
  8. std::vector<double> x, y, z;
  9. int count = 1;
  10. for (int i = 0; i < n; i++) {
  11. x.push_back(i * i);
  12. y.push_back(sin(2 * 3.14 * i / 360.0));
  13. z.push_back(log(i));
  14. if (i % 10 == 0) {
  15. // Clear previous plot
  16. plt::clf();
  17. // Plot line from given x and y data. Color is selected automatically.
  18. plt::plot(x, y);
  19. // Plot a line whose name will show up as "log(x)" in the legend.
  20. plt::named_plot("log(x)", x, z);
  21. // Set x-axis to interval [0,1000000]
  22. plt::xlim(0, n * n);
  23. // Add graph title
  24. plt::title("Sample figure");
  25. // Enable legend.
  26. plt::legend();
  27. // Display plot continuously
  28. std::string pathObj = "animation//" + std::to_string(count);
  29. //plt::save(pathObj );
  30. plt::pause(0.01);
  31. count++;
  32. }
  33. }
  34. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行