Visual Studio C++ 画图【极简版】

本文介绍如何在C++中调用Python的matplotlib库进行绘图,包括配置步骤、画图函数模板及实例演示,如绘制曲线和圆形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

配置的话根据下面的我写的这篇来配置清楚。很容易的,遇到写的不清楚直接戳我。

配置

这里我们要求必须要安装了python还有安装了一些必须要的库(这些比上面的还简单很多,所以就简单附上文字说明了)。

画图

这里的话,为了方便使用,我做了一个模板的封装,这样以后使用的时候,直接调用类似的函数就好了。
大家使用的时候,直接复制粘贴就好了

#include<Python.h>
#include<string>
using namespace std;
#include <iostream>

template<class T> 
string arr_to_string_list(T*arr, int N) {
	string s = "[";
	for (int i = 0; i < N; ++i) {
		s += to_string(arr[i]);
		if (i != N - 1) s += ",";
	}
	s += "]";
	return s;
}

template<class T, class V=int>
void plot(T*x, int N1, V*y=NULL, bool equal=false) {
	PyRun_SimpleString("import matplotlib.pyplot as plt");
	if (equal) {
		PyRun_SimpleString("plt.axis(\"equal\")");
	}

	string cmd = "plt.plot(";
	string s1 = arr_to_string_list(x, N1);
	if (y != NULL) {
		string s2 = arr_to_string_list(y, N1);
		cmd += (s1 + "," + s2 + ")");
		PyRun_SimpleString(cmd.c_str());
	}
	else {
		cmd += (s1 + ")");
		PyRun_SimpleString(cmd.c_str());
	}
	PyRun_SimpleString("plt.show()");
}

void pythonInitial() {
	Py_Initialize(); /*初始化python解释器,告诉编译器要用的python编译器*/
	string path = ".";
	string chdir_cmd = string("sys.path.append(\"") + path + "\")";
	const char* cstr_cmd = chdir_cmd.c_str();
	PyRun_SimpleString("import sys");
	PyRun_SimpleString(cstr_cmd);
}

主函数部分:

void main() {
	double a[] = { 1.2, 2.0, 3, 4, 5, 6, 3, 2, 3, 2, 31, 2, 1, 4 };
	pythonInitial();
	plot(a, 14); // 14是数组长度
	Py_Finalize(); /*结束python解释器,释放资源*/
	system("pause");
}

在这里插入图片描述

调用的方法很简单就是直接使用下面的范式(注意先调用python的初始化和python的释放)

plot(数组,长度);

使用实例

其实就是修改下main函数部分,来看下结果。

实例一

void main() {
	const int N = 14;
	int b[N] = {};
	for (int i = 0; i < N; ++i) { b[i] = 2 * i - 1; }
	double a[] = { 1.2, 2.0, 3, 4, 5, 6, 3, 2, 3, 2, 31, 2, 1, 4 };
	pythonInitial();
	plot(b, N, a);
	Py_Finalize(); /*结束python解释器,释放资源*/
	system("pause");
}

在这里插入图片描述

实例二

  • 这个需要添加一个头文件
#include <cmath>
void main() {
	const int N = 14;
	int b[N] = {};
	for (int i = 0; i < N; ++i) { b[i] = 2 * i - 1; }
	double a[N] = {};
	for (int i = 0; i < N; ++i) { a[i] = sin(b[i]); }
	pythonInitial();
	plot(b, N, a);
	Py_Finalize(); /*结束python解释器,释放资源*/
	system("pause");
}

在这里插入图片描述

实例三

就是把上面的函数画得稍微好看点。
(c++画sin函数)

  • 这里的话,用到了pi所以,换一下头文件,把刚刚的
#include <cmath>

替换成(顺序不能颠倒)(不然就是定义一下PI

#define _USE_MATH_DEFINES
#include <math.h>
void main() {
	const int N = 1000;
	double b[N] = {};
	for (int i = 0; i < N; ++i) { b[i] = 2*M_PI * i / N; }
	double a[N] = {};
	for (int i = 0; i < N; ++i) { a[i] = sin(b[i]); }
	pythonInitial();
	plot(b, N, a);
	Py_Finalize(); /*结束python解释器,释放资源*/
	system("pause");
}

在这里插入图片描述

实例四(画圆)

void main() {
	const int N = 1000;
	double r = 1.0;
	double point_x = 0.0, point_y = 0.0;
	double b[N] = {};
	for (int i = 0; i < N; ++i) { b[i] = 2*M_PI * i / N; }
	double x[N] = {};
	for (int i = 0; i < N; ++i) { x[i] = point_x + r * cos(b[i]); }
	double y[N] = {};
	for (int i = 0; i < N; ++i) { y[i] = point_y + r * sin(b[i]); }
	pythonInitial();
	plot(x, N, y, true);
	Py_Finalize(); /*结束python解释器,释放资源*/
	system("pause");
}

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gc.collect()

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值