Windows系统下使用C++调用Matplotlib库实现图表绘制(Windows10+VS2015/Release+Python3.6.1)

Matplotlib是Python的一个2D图形库,能够生成各种格式的图形(如折线图、散点图、直方图等),界面可交互(可以利用鼠标对生成图形进行点击操作),同时该2D图形库跨平台,即既可以在Python脚本中编码操作,也可以在Jupyter Notebook中使用,而且生成图形质量较高,甚至可以达到出版级别。

step1 运行环境和前期准备

1、Windows 10 64位

2、Visual Studio 2015 Professional

3、Anaconda4.4.0 (Python 3.6.1)
安装完成后需要将安装目录添加至环境变量中。Python3.7对应VS2017,Python3.6对应VS2015,不支持在虚拟环境中创建的Python环境。

step2 编译

1、下载Matplotlib-cpp源码:
https://github.com/lava/matplotlib-cpp.git

2、解压缩后,打开contrib目录下的WinBuild.cmd文件,修改文件中4至8行为自己的配置环境:
在这里插入图片描述

在这里插入图片描述
14表示VS2015,PYTHONHOME为Anaconda的安装目录,即前面添加至环境变量的目录,以Release为例进行编译,Debug版本后续会有涉及说明。

3、打开控制台cmd,切换至对应目录,运行WinBuild.cmd文件即可完成编译(必须保证最后编译结果无错误):
在这里插入图片描述
在这里插入图片描述

step3 配置环境及测试

1、在VS2015中新建空项目,在视图->属性管理器(以Release x64为例)中添加如下目录:
(1)VC++目录–>包含目录:
在这里插入图片描述
(2)VC++目录–>库目录:
在这里插入图片描述
(3)链接器–>输入–>附加依赖项:
在这里插入图片描述
2、在新建cpp文件中添加如下测试代码:

扫描二维码关注公众号,回复: 11539108 查看本文章
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;

int main()
{
	std::vector<std::vector<double>> x, y, z;
	for (double i = -5; i <= 5; i += 0.25)
	{
		std::vector<double> x_row, y_row, z_row;
		for (double j = -5; j <= 5; j += 0.25)
		{
			x_row.push_back(i);
			y_row.push_back(j);
			z_row.push_back(::std::sin(::std::hypot(i, j)));
		}
		x.push_back(x_row);
		y.push_back(y_row);
		z.push_back(z_row);
	}
	plt::plot_surface(x, y, z);
	plt::show();
	system("pause");
}

3、在Release下直接调试代码会出错,显示需要Qt组件支持,因此作如下处理(此处参考:https://www.cnblogs.com/IUNI/p/7028042.html):
在这里插入图片描述
(1)在测试解决方案Release目录下,将D:\Anaconda_Py\libs目录下的python3.dll、python36.dll;将D:\QT571\5.7\msvc2015_64\plugins\platforms文件夹;将D:\QT571\5.7\msvc2015_64\lib目录下的Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll复制至该目录。
(2)重新生成解决方案。
(3)运行MatplotlibCppTest.exe文件。
在这里插入图片描述
4、测试程序运行成功:
在这里插入图片描述

关于Debug版本的说明:参考Release版本的编译方式,只需将所有涉及到Release的地方改成Debug即可,但是python36.dll等库仍是Release版本(如果是Debug版本,文件名应为python36_d.dll),且不能将文件名直接修改,因此需要编译Python源码,由于官方网站响应时间过长,可以至:https://www.python.org/ftp/python/下载对应版本的python源码,tar.xz和tgz格式均可,具体编译过程可参考:https://www.cnblogs.com/jsjrj01/p/9835002.html。编译完成后会生成如下文件:
在这里插入图片描述
上面的文件与Release版本文件具有同等地位,重复step2、step3即可完成编译和配置过程,至于在Debug下直接调试代码是否会与Release一样出错,目前遇到一些问题,仍在测试中。

参考文章:
微信公众号:OpenCV学堂
(五分钟学会C++高效图表绘制神器调用)
https://www.cnblogs.com/linlongyu/p/10361985.html

Juliet 于 2020.02

猜你喜欢

转载自blog.csdn.net/stjuliet/article/details/104185132