在Windows中,matplotlibcpp的使用

news2024/11/23 11:27:19

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位的,果然成功。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT的TcpServer

Server服务器端 QT版本5.6.1 界面设计 工程文件&#xff1a; 添加 network 模块 头文件引入TcpServer类和TcpSocket&#xff1a;QTcpServer和QTcpSocket #include <QTcpServer> #include <QTcpSocket>创建server对象并实例化&#xff1a; /*h文件中*/QTcpServer…

Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)

Python根据预设txt生成“你画我猜”题目PPT&#xff08;素拓活动小工具&#xff09; 场景来源 去年单位内部的一次素拓活动&#xff0c;分工负责策划设置其中的“你画我猜”环节&#xff0c;网络上搜集到题目文字后&#xff0c;想着如何快速做成对应一页一页的PPT。第一时间想…

观察者模式实战:解密最热门的设计模式之一

文章目录 前言一、什么是观察者模式二、Java实现观察者模式2.1 观察者接口2.2 具体观察者2.3 基础发布者2.4 具体发布者2.5 消息发送 三、Spring实现观察者模式3.1 定义事件类3.2 具体观察者3.3 具体发布者3.4 消息发送 总结 前言 随着系统的复杂度变高&#xff0c;我们就会采…

Google 发布 CodeGemma 7B,8K上下文,性能超CodeLlama 13B

CodeGemma简介 CodeGemma模型是谷歌的社区开放编程模型&#xff0c;专门针对代码领域进行优化。一系列功能强大的轻量级模型&#xff0c;能够执行多种编程任务&#xff0c;如中间代码填充、代码生成、自然语言理解、数学推理和指令遵循。CodeGemma模型是在大约500B个主要为英语…

【算法入门教育赛1D】环形密码 - 字符串 | C++题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/161 题目描述 小 e e e有一个宝箱&#xff0c;这个宝箱有一个长度为 n n n的密码&#xff0c;但是这个密码校验器是一个环形&#xff0c;意思是只要密码从任意一位开始读&#xff08;读到最后一位回到第一位继续&a…

每日OJ题_贪心算法二⑤_力扣870. 优势洗牌(田忌赛马)

目录 力扣870. 优势洗牌&#xff08;田忌赛马&#xff09; 解析代码 力扣870. 优势洗牌&#xff08;田忌赛马&#xff09; 870. 优势洗牌 难度 中等 给定两个长度相等的数组 nums1 和 nums2&#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引…

Redis - Zset 有序集合

前言 它保留了集合不能有重复成员的特点&#xff0c;但与集合不同的是&#xff0c;有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数&#xff08;score&#xff09;与之关联&#xff0c;有序集合中的元素是可以维护有序性的&#xff0c;但这个有序不是⽤下标作为排序依据⽽是…

笔记13-OSError: [Errno 24] Too many open files

文章目录 参考文献失败尝试系列查看发现&#xff0c;似乎是因为线程数有限制 修改配置先查查看 增加文件数限制&#xff0c;然后使用命令运行&#xff08;成功&#xff09; 参考文献 Linux 最大可以打开多少文件描述符&#xff1f; OSError: [Errno 24] Too many open files错…

Redis-单机安装

试图从官网注册不了我也不知道什么情况。 网盘自取吧&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1KERBQaH9gCT10AGt9z0_jg?pwdyjen 安装比较简单&#xff0c;照着敲就完了每一步都试过了&#xff0c;先单机安装&#xff0c;后面搭建集群。 1.将安装包放到/usr/…

一文带你了解MySQL的索引分类

文章目录 ☃️分类☃️演示图☃️思考☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开…

C++之set/map相关实现

看着上面的图片&#xff0c;你可能对set和map的多样变化产生疑惑&#xff0c;下面我们就来详细讲解他们的区别以及实现 一.set/map 首先&#xff0c;在这里我们要声明&#xff0c;如果你对二叉搜索树一点都不了解的话&#xff0c;建议你先去将搜索二叉树学会再来学习这里的内…

MFC 列表控件删除实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载) 》 2、程序功能选中列表控件某一项&#xff0c;删除按钮由禁止变为可用&#xff0c;点击删除按钮&#xff0c;选中的项将删除。 3、首先在主界面添加一个删除参数按钮。 4、在myDlg.cpp 文件…

Python语言零基础入门——文件

目录 一、文件的基本概念 1.文件 2.绝对路径与相对路径 3.打开文件的模式 二、文件的读取 三、文件的追加 四、文件的写入 五、with语句 六、csv文件 1.csv文件的读取 2.csv文件的写入 七、练习题&#xff1a;实现日记本 一、文件的基本概念 1.文件 文件是以计算…

win10禁止自动更新的终极方法

添加注册表值 1.运行&#xff0c;输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中&#xff0c;新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名为以下命名“Fl…

python判断大图中包含小图并输出位置总结

python判断大图中包含小图并输出位置总结 没啥可说的&#xff0c;项目遇到了就直接上代码&#xff0c;可以减轻劳动力&#xff0c;花最少得时间实现应用功能。 import cv2 # 读取大图片和小图片的路径 img_big cv2.imread(big_image.png) img_small cv2.imread(small_image…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容&#xff0c;使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

数据结构--顺序表经典OJ题

例1&#xff1a;合并有序顺序表 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff…

R可视化:分组频率分布直方图和密度图

介绍 ggplot2绘制分组频率分布直方图和密度图 加载R包 knitr::opts_chunk$set(message FALSE, warning FALSE) library(tidyverse) library(patchwork) library(ggpubr) library(rstatix)# rm(list ls()) options(stringsAsFactors F) options(future.globals.maxSize …

数据结构与算法---树

数据结构可视化网址 Structure Visualization: https://www.cs.usfca.edu/~galles/visualization/Totuma: https://www.totuma.cn/Algorithm Visualizer: https://algorithm-visualizer.org/ 构建二叉树 // C#include<stdio.h> #include<stdlib.h>typedef char T…

电脑找不到msvcp140.dll如何修复?msvcp140.dll丢失的多种解决方法分享

在日常电脑操作过程中&#xff0c;用户可能会遇到一个令人困扰的问题&#xff0c;即屏幕上突然弹出一条错误提示&#xff1a;“由于找不到msvcp140.dll&#xff0c;无法继续执行代码”。这一情况往往导致应用程序无法正常启动或运行&#xff0c;给工作和娱乐带来不便。不过&…