1.介绍

  matplotlibcpp,是简单的C++绘图库。其底层是利用的python中的工具包matplotlib绘图的,所以在使用matplotlibcpp前需要安装python。使用方法类似于python中的工具包matplotlib。
下载地址:https://github.com/lava/matplotlib-cpp
官方教程地址:https://matplotlib-cpp.readthedocs.io/en/latest/index.html

2.环境配置

  此处python环境配置强烈建议使用anaconda3(下载地址:https://www.anaconda.com),因为在发布时需要打包matplotlib-cpp所有第三方依赖库,anaconda3可以直接下载好。Python不一定使用Python2.7版本,其他版本也可以。下面是anaconda3配置Python教程:
(1) 创建新的python环境,打开Anaconda,点击Create。
在这里插入图片描述
(2) 输入名称,和选择python版本,查看默认安装位置,可查看https://blog.51cto.com/u_13727606/5307782设置默认安装目录。
在这里插入图片描述

(3) 下载matplotlib,因为matplotlibcpp.h中存储的基本是函数接口,具体执行函数还是在matplotlib包中。
在这里插入图片描述
(4) 勾选,点击Apply后,可查看依赖包。
在这里插入图片描述
(5) 完成安装。
(6) VS2019配置matplotlibcpp。根据(2)中的默认安装位置配置。因为我的Python没有安装Debug版本,只能使用Release,numpy模块在安装matplotlib时就已经安装好了。配置附加包含目录,附加库目录,附加依赖项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(7) 配置完(6)程序是无法运行的,需要将如下三个dll文件复制到exe目录下:
python3.dll、python38.dll、vcruntime140.dll(存放路径:E:\Anaconda3\envs\matplotlib38)
并且将文件夹:platforms复制到exe目录下(存放路径:E:\Anaconda3\envs\matplotlib38\Library\plugins\platforms)
在这里插入图片描述
(8) 配置完以上后,还需要将目录E:\Anaconda3\envs\matplotlib38\Library\bin添加到环境变量,因为matplotlib显示窗口需要后端显示,这里是使用的Qt5,而PyCharm默认使用TKAgg 。
在这里插入图片描述
(9) 所有环境配置完成。

3.matplotlibcpp使用

(1) 需要将下载后的源码文件里的matplotlibcpp.h头文件拷贝进自己的工程里,其他都不需要。
在这里插入图片描述
(2) 在源码文件中有文件夹examples,里面存放着函数测试示例。为了使运行时不报错,需要做如下处理:注释掉第354和356行。
在这里插入图片描述
(3) 测试程序及结果:

#include <iostream>
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;

int main()
{
    plt::plot({ 1,3,2,4 });
    plt::show();
    std::cout << "Hello World!\n";
}

在这里插入图片描述
(4) 更多示例可参考源码文件夹examples。
(5) 补充:matplotlibcpp.h文件里提供的基本都是接口,最终的实现还是python的matplotlib库。结合自己的实际应用自己添加了一个新的接口:closeAll,主要用途是关闭所有Figure窗口,与plt.close(‘all’)作用一样。
下载地址:https://download.csdn.net/download/weixin_44272195/86542411
在这里插入图片描述

4.发布

  发布就是可以在裸机上可以运行,这一部分也是自己调试很久才解决的。
(1) 2中配置完环境变量后,继续如下就可以使exe在裸机上可以运行了。
(2) 打包Python程序:
将目录:E:\Anaconda3\envs\matplotlib38下的文件夹DLLs、include、Lib、libs拷贝到一个新的文件夹里,我这里放在了Python38文件夹里,并且将这个新的文件夹赋值到自己的C++项目工程里。
在这里插入图片描述
(3) 改变2中C++库配置。
将E:\Anaconda3\envs\matplotlib38改成Python38,程序还是可以运行的,他会自动调用Python38文件夹里的文件,与调用E:\Anaconda3\envs\matplotlib38文件夹里的一样。
在这里插入图片描述
在这里插入图片描述
(4) 拷贝dll到exe目录里,为了使exe可以在裸机上运行,我们需要将目录:E:\Anaconda3\envs\matplotlib38\Library\bin里的所有dll文件拷贝到exe目录下。为了使程序简洁,在exe里新建文件夹dll,将目录:E:\Anaconda3\envs\matplotlib38\Library\bin里的dll文件拷贝到与exe同目录的dll文件夹里。并且需要添加windows.h和使用函数SetDllDirectory()设置库路径,此处是相对路径。还需设置python环境。代码改成如下:

#include <iostream>
#include "matplotlibcpp.h"
#include <windows.h>
namespace plt = matplotlibcpp;

int main()
{
    SetDllDirectory(L"./dll");//设置dll路径
    Py_SetPythonHome((wchar_t*)(L"./Python38"));//设置python环境
    plt::plot({ 1,3,2,4 });
    plt::show();
    std::cout << "Hello World!\n";
}

(5) 将Python38文件夹【(2)中打包的Python】,拷贝到exe目录下。
在这里插入图片描述

(6) 虚拟机测试,将以上所有文件拷贝到其他电脑或虚拟机里执行,即可显示。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐