在Windows中,matplotlibcpp的使用

0 前言

本篇文章记录一个c++库的使用:matplotlib-cpp,其作用是在c++中调用python的matplotlib,实现绘图操作。

对于Windows环境下使用该库的文章,发现文章依然存在一些问题,总是存在报错不能解决,花费了较多的时间去寻找方式,最后终于成功。

1 环境

  • 操作系统:Windows11
  • Python环境:python3.7.9-64bit
  • IDE:CLion2023

2 操作步骤

2.1下载

直接到GitHub官方下载即可,可以使用Git拉取,笔者直接下载的zip包解压。网址:lava/matplotlib-cpp: Extremely simple yet powerful header-only C++ plotting library built on the popular matplotlib (github.com)

2.2 解压

直接解压就可以

笔者最初想要将这个库安装到本地电脑,然后再调用,但是发现安装有些问题,而且其实主要是需要用到压缩包中的matplotlibcpp.h文件,于是就简单点,之间引用即可。

image-20240502201022643
2.3 配置

引用,使用CLion创建一个Demo,CMakelists.txt配置如下

cmake_minimum_required(VERSION 3.27)
project(matplot)

set(CMAKE_CXX_STANDARD 17)

include_directories("D:/soft/matplotlib-cpp")

#find_package(Python3 REQUIRED COMPONENTS Interpreter)
#message("PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}")
#message("Python3_EXECUTABLE: ${Python3_EXECUTABLE}")

#find_package(PythonLibs REQUIRED)
#include_directories(${PYTHON_INCLUDE_DIRS})

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
include_directories(${Python3_INCLUDE_DIRS})


add_executable(matplot main.cpp)


#target_link_libraries(matplot ${PYTHON_LIBRARIES})
target_link_libraries(matplot ${Python3_LIBRARIES})
include_directories("D:/soft/Python/Python37/Lib/site-packages/numpy/core/include")

2.3.1 python环境

主要是其中几个地方

(1)首先:第六行include_directories("D:/soft/matplotlib-cpp"),路径是自己解压matplotlib-cpp后的文件夹位置

(2)Python环境

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
include_directories(${Python3_INCLUDE_DIRS})


target_link_libraries(matplot ${Python3_LIBRARIES})
include_directories("D:/soft/Python/Python37/Lib/site-packages/numpy/core/include")

若这一步不设置,则会出现如下错误:找不到<Python.h>

image-20240502201954454

添加上述语句后,其实是去寻找本地安装的Python的库。

这里会存在问题,之前参考一篇文章,但是或许是版本问题,笔者使用那样的书写方式不能成功,并在此处花费了大量时间,发现还是不能解决问题,这也是写下这篇记录的原因之一,希望能帮助到遇到同样问题的人

文章地址:http://t.csdnimg.cn/3WSkq

这篇文章中使用的是

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})

target_link_libraries(matplot ${PYTHON_LIBRARIES})

但是本人在使用这个方式的时候,依然不能通过。会出现如下错误:

image-20240502202311702

后来更改为

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
include_directories(${Python3_INCLUDE_DIRS})


target_link_libraries(matplot ${Python3_LIBRARIES})

这个方式是在AI中找到的,也是抱着试一试的心态,没想到能成功,原回答如下:

PixPin_2024-05-02_20-30-18
2.3.2 numpy环境问题

如果Python环境没有下载numpy包,也会出现问题,即找不到numpy,同时,还需要配置文件中的最后一行

(1)打开命令行窗口,执行

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

下载numpy包到当前环境

(2)接着在CMakeLists.txt文件中加入如下,注意路径是在自己的python解释器安装位置寻找

include_directories("D:/soft/Python/Python37/Lib/site-packages/numpy/core/include")

3 运行示例

官方例子

#include <matplotlibcpp.h>
namespace plt = matplotlibcpp;
int main() {
    plt::plot({1,3,2,4});
    plt::show();
}

运行结果

image-20240502203906293

补充

在上述使用配置过程中,笔者还遇到一个问题,配置文件如上述书写,即(简化一下)

cmake_minimum_required(VERSION 3.27)
project(matplot)

set(CMAKE_CXX_STANDARD 17)

include_directories("D:/soft/matplotlib-cpp")

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
include_directories(${Python3_INCLUDE_DIRS})

add_executable(matplot main.cpp)

target_link_libraries(matplot ${Python3_LIBRARIES})
include_directories("D:/soft/Python/Python37/Lib/site-packages/numpy/core/include")

发现运行的时候,没有报错,但是生成可执行文件失败,刚开始找不到原因,但是笔者的Python环境使用的是Python3.7.9-32bit,机缘巧合下下载的是32位的,猜想是不是这个问题导致生成可执行文件失败,于是更换解释器为64位的,果然成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589668.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RCE学习

从最近的xyctf中&#xff0c;最大的感受就是自己的rce基础并不牢固&#xff0c;所以马上来恶补一下 漏洞成因 php和其他语言有很多能够执行系统命令或执行其他php代码的函数&#xff0c;因为开发者的使用不当&#xff0c;使得用户能够控制传递给执行命令的函数的参数&#xf…

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的&#xff0c;英文Plug and play的缩写&#xff0c;中译即插即用&#xff0c;意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序&#xff0c;做到插上就能用&#xff0c;无须人工干预&#xff0c;是Windows自带的一项技术。所谓即插即用是指将…

发卡盗u源码系统搭建ZHU

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板&#xff0c;最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U&#xff0c;教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.ssl不强https

【抽代复习笔记】17-群(十一):置换的练习题(1)

练习1&#xff1a;计算&#xff1a; 解&#xff1a; 解析&#xff1a;①左边的置换是1保持不变&#xff0c;2变成3&#xff0c;3变成4&#xff0c;4变成5&#xff0c;5变成2&#xff0c;因此可以简写为(2345)&#xff1b;右边的置换是2和5保持不变&#xff0c;1变成3&#xff…

IDEA 2022.1版本开始,可以直接运行Markdown里的命令行

参照这种格式&#xff1a; shell mvn clean install注意idea支持的版本&#xff1a;是从 2022.1版本开始的。 ps&#xff1a;之前有人写过了&#xff0c;感觉很实用但是蛮多开发者不一定会知道的功能。 参考资料&#xff1a; https://www.cnblogs.com/didispace/p/16144107.h…

【docker】maven 打包docker的插件学习

docker-maven-plugin GitHub地址&#xff1a;https://github.com/spotify/docker-maven-plugin 您可以使用此插件创建一个 Docker 映像&#xff0c;其中包含从 Maven 项目构建的工件。例如&#xff0c;Java 服务的构建过程可以输出运行该服务的 Docker 映像。 该插件是 Spot…

【跟马少平老师学AI】-【神经网络是怎么实现的】(九)长短期记忆网络

一句话归纳&#xff1a; 1&#xff09;RNN也会存在梯度消失的问题。 2&#xff09;同一句话&#xff0c;对于不同的任务&#xff0c;句中不同的词起的作用也不一样。 3&#xff09;LSTM&#xff08;长短期记忆&#xff09;子网络&#xff1a; 门&#xff0c;让输入经过运算&…

附录6-4 黑马优购项目-分类和购物车

目录 1 分类 1.1 接口 1.2 窗口限制 1.3 选中状态样式判断 1.4 点击左侧时右侧会到顶点 1.5 源码 2 购物车 2.1 store 2.2 tabBar徽标 2.3 滑动删除 2.4 结算 2.4.1 结算前登录 2.4.2 结算功能 2.5 触发组件事件 2.6 源码 1 分类 分类最上部是…

Android手写自己的路由SDK

实现自己的路由框架 ​ 在较大型的Android app中常会用到组件化技术&#xff0c;针对不同的业务/基础功能对模块进行划分&#xff0c;从上到下为壳工程、业务模块、基础模块。其中业务模块依赖基础模块&#xff0c;壳工程依赖业务模块。同级的横向模块&#xff08;比如多个业务…

使用Nuxt3框架搭建基础项目

Nuxt3安装 基础配置: Node.js** - v18.0.0版本以上 , 可以结合fnm工具切换node版本 安装nuxt3命令 打开vscode或者控制台去到项目文件夹输入: npx nuxilatest init <project-name> 国内执行这行代码&#xff0c;即使科学上网也会有问题 ⚠️ 安装Nuxt3报错 安装过程…

数据分析--客户价值分析RFM(K-means聚类/轮廓系数)

原数据 import os import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import metrics ### 数据抽取&#xff0c;读⼊数据 df pd.read_csv("customers1997.csv") #相对路径读取数据 print(df.info()) pr…

如何定时打开网站

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具按下Ctrl3&#xff0c;切换到定时器模块&#xff0c;左侧右键&#xff0c;选择新建 2、标题叫百度&#xff0c;等下就让它打开百度&#xff0c…

Spring - 6 ( 9000 字 Spring 入门级教程 )

一&#xff1a; SpringBoot 配置文件 1.1 配置文件作用 配置文件通常是一个文本文件&#xff0c;其中包含了程序或系统的各种设置、选项和参数。比如C:\Users, C:\Windows 文件夹, 以及各种 .config, .xml 文件 配置文件主要是为了解决硬编码&#xff08;代码写死&#xff0…

排序算法--希尔排序

前提&#xff1a; 排序算法——直接插入排序-CSDN博客 希尔排序(Shell Sort)是插入排序的一种。是直接插入排序算法的Plus版。该方法又称缩小增量排序&#xff0c;是D.L.Shell于1959年提出。要想学好希尔排序&#xff0c;直接插入排序一定要学好&#xff0c;没学过的&#xff0…

chrome extension插件替换网络请求中的useragent

感觉Chrome商店中的插件不能很好的实现自己想要的效果,那么就来自己动手吧。 本文以百度为例: 一般来说网页请求如下: 当前使用的useragent是User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safar…

【Flask 系统教程 4】Jinjia2模版和语法

Jinjia2 模板 模板的介绍 Jinja2 是一种现代的、设计优雅的模板引擎&#xff0c;它是 Python 的一部分&#xff0c;由 Armin Ronacher 开发。Jinja2 允许你在 HTML 文档中嵌入 Python 代码&#xff0c;以及使用变量、控制结构和过滤器来动态生成内容。它的语法简洁清晰&#…

java发送请求2次开发-get请求json

因为你请求参数不为空&#xff0c;接口都会把这个参数带上 所以借鉴HttpPost类 继承这个类&#xff0c; 这个类是可以带消息的 httpgetwithentity&#xff0c;httpget请求带上消息 复写 构造方法复制过来进行使用 二次开发类让其get请求时可以发送json

IOS上线操作

1、拥有苹果开发者账号 2、配置证书&#xff0c;进入苹果开发者官网&#xff08;https://developer.apple.com/&#xff09; 3、点击账户&#xff08;account&#xff09;&#xff0c;然后创建一个唯一的标识符 4、点击"Identifiers"&#xff0c;然后点击"&qu…

SpringBoot的ProblemDetails

1.RFC 7807 之前的项目如果出现异常&#xff0c;默认跳转到error页面。或者是抛出500 异常。 但是对于前后端分离的项目&#xff0c;Java程序员不负责页面跳转&#xff0c;只需要 把错误信息交给前端程序员处理即可。而RFC 7807规范就是将异常 信息转为JSON格式的数据。这个…

android init进程启动流程

Android系统完整的启动流程 android 系统架构图 init进程的启动流程 init进程启动服务的顺序 bool Service::Start() {// Starting a service removes it from the disabled or reset state and// immediately takes it out of the restarting state if it was in there.flags_…