C++ matplotlib 画图 Linux

Matplotlib-cpp画图

命令行下载matplotlibcpp

git clone https://github.com/lava/matplotlib-cpp

将matplotlibcpp.h移动到自己所用的工程

CMakeList.txt文件如下所示

cmake_minimum_required(VERSION 3.0.2)
project(huatu)set(CMAKE_CXX_STANDARD 11)file(GLOB_RECURSE PYTHON2.7_LIB "/usr/lib/python2.7/config-x86_64-linux-gnu/*.so")
set(PYTHON2.7_INLCUDE_DIRS "/usr/include/python2.7")find_package(catkin REQUIRED COMPONENTSroscppstd_msgs
)catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES huatu
#  CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)include_directories(include${PYTHON2.7_INLCUDE_DIRS}
)add_executable(huatu src/main.cpp)
target_link_libraries(huatu ${PYTHON2.7_LIB})

1 matplotlib的使用

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

在这里插入图片描述

#include "matplotlibcpp.h"
#include <cmath>
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();
}

在这里插入图片描述

#include <cmath>
#include "matplotlibcpp.h"namespace plt = matplotlibcpp;
int main()
{int n = 1000;std::vector<double> x, y, z;for (int i = 0; i < n; i++) {x.push_back(i * i);y.push_back(sin(2 * M_PI * i / 360));z.push_back(log(i));if (i % 10 == 0) {plt::clf();plt::plot(x, y);plt::named_plot("log(x)", x, z);plt::xlim(0, n * n);plt::title("Simple figure");plt::legend();plt::pause(0.01);}}
}

在这里插入图片描述

#include <cmath>
#include "matplotlibcpp.h"
#include <vector>namespace plt = matplotlibcpp;
int main()
{std::vector<double> x(1000);std::vector<double> y(1000);for (size_t i = 0; i < x.size(); i++){x[i] = i / 100.0;y[i] = sin(2.0 * M_PI * 1.0 * x[i]);}plt::xkcd();plt::[添加链接描述](https://blog.csdn.net/sdas653/article/details/134234279?ops_request_misc=&request_id=&biz_id=102&utm_term=matplotlibC%20%20%E7%94%BB%E5%9B%BE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-134234279.142%5Ev99%5Epc_search_result_base4&spm=1018.2226.3001.4187)plot(x, y);plt::title("Hello");plt::show();
}

在这里插入图片描述

2 画图常用的步骤

参考博客:C++ 使用matplotlib画图

提供了以下功能:
(1)基本绘图:matplotlib-cpp 支持许多基本的 2D 图形,包括线图、散点图、条形图、直方图、饼图等
(2)子图:可以在一个画布上创建多个子图,每个子图可以独立绘制
(3)颜色、标记和线型:可以自定义每个图形的颜色、标记(数据点的形状)和线型(实线、虚线等)
(4)图例和标题
(5)坐标轴设置
(6)网格线
(7)文本和标注
(8)保存和显示:可以将图形保存为各种格式的文件,或在窗口中直接显示

// 设置输出图像的大小为1200x780像素
plt::figure_size(1200, 780);
// 轨迹用红色虚线
plt::plot(x1, y1, "r--");
// 添加图例 真实轨迹用蓝色实线(默认实线)
plt::named_plot("truth", x2, y2, "b"); 
// 设置x轴的范围为[0,100],设置y轴的范围为[0,100]
plt::xlim(0, 100);
plt::ylim(0, 100);
// 添加图表标题
plt::title("Compare figure");
// 启用图例
plt::legend();
// 显示图像
plt::show();
// 保存图像
plt::save("./a.png");
// 添加三个子图// 第一个子图
plt::subplot(2, 2, 1);
plt::plot(x, y, "g--");// 第二个子图
plt::subplot(2, 2, 2);
plt::plot(x, z);// 第三个子图
plt::subplot(2, 2, 3);
plt::plot(x, w);
// 设置标签
plt::xlabel("x label");
plt::ylabel("y label");
plt::set_zlabel("z label"); // set_zlabel rather than just zlabel, in accordance with the Axes3D method

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

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

相关文章

生成树(习题)

模板】最小生成树 生成树有两种方法&#xff0c;但是我只会克鲁斯卡尔算法&#xff0c;所以接下来下面的的题目都是按照这个算法来实现的&#xff0c;首先来见一下生么是这个算法&#xff0c;在之前的我写的一篇博客中有题使叫修复公路&#xff0c;其实这一题就是使用了这个算…

Redis相关介绍

概念 Redis&#xff1a;非关系型数据库&#xff08;non-relational)&#xff0c;Mysql是关系型数据库(RDBMS) Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库 为什么使用NoSQL 关系型 数据库无法应对每秒上万次 的读写请求 表中的存储记录 数量有限 无法简单…

JUC-java并发编程的艺术

一、并发问题 上下文切换&#xff1a;CPU通过时间片分配算法来循环执行任务&#xff0c;当前任务执行一个时间片后会切换到下一个任务。在切换前会保存上一个任务的状态&#xff0c;以便下次切换回这个任务时&#xff0c;可以再加载这个任务的状态。所以任务从保存到再加载的过…

MySQL:常用指令

MySQL官网 一、在Windows 系统 cmd窗口里执行的命令 启动:net start MySQL停止:net stop MySQL卸载:sc delete MySQL 二、在macOS系统终端里执行的命令 启动&#xff1a;mysql.server start停止&#xff1a;mysql.server stop重启&#xff1a;mysql.server restart 三、执行帮…

Qt:槽函数的五种写法

一、Qt4写法&#xff08;不推荐&#xff09; connect(ui.btnOpen,SIGNAL(clicked),this,SLOT( open() ) );因为是以宏定义的方式展开&#xff0c;所以如果SIGNAL写错&#xff0c;或者信号名字、槽函数写错、编译器是无法检验出来的&#xff0c;导致出现隐性BUG&#xff0c;不容…

【医学大模型 知识增强】SMedBERT:结构化语义知识 + 医学大模型 = 显著提升大模型医学文本挖掘性能

SMedBERT&#xff1a;结构化语义知识 医学大模型 显著提升医学文本挖掘任务性能 名词解释结构化语义知识预训练语言模型医学文本挖掘任务 提出背景具体步骤提及-邻居混合注意力机制实体嵌入增强实体描述增强三元组句子增强 提及-邻居上下文建模域内词汇权重学习领域自监督任务…

【项目】高并发内存池

高并发内存池 【项目】高并发内存池项目介绍这个项目做的是什么&#xff1f; 内存池相关知识池化技术内存池malloc 定长内存池的实现高并发内存池整体框架设计ThreadCache对齐规则封装FreeList类封装thread cache类TLS无锁访问 CenctralCache整体设计页号规定span结构SpanList结…

QQ强制聊天,加好友。临时会话接口跳转单页源码

QQ互动增强工具&#xff1a;一键聊天、加好友与临时会话 &#x1f525; 全新体验&#xff0c;轻松连接 &#x1f525; 在数字社交时代&#xff0c;QQ仍然是我们与亲朋好友、工作伙伴沟通的重要桥梁。但有时候&#xff0c;复杂的设置和权限障碍让简单的“加个好友”或“说句话…

【Linux学习】生产者-消费者模型

目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…

FPGA模块——SPI接口设计

SPI接口设计 SPI基础代码模版1. SPI协议与芯片交互接口2. SPI协议的控制器&#xff08;状态机&#xff09; SPI基础代码模版 user输入&#xff1a; valid信号 &#xff0c; 要输出的值 输出 &#xff1a;一个周期读valid &#xff0c; 读到的值 module spi_drive#(parameter…

Vue源码系列讲解——模板编译篇【三】(HTML解析器)

目录 1. 前言 2. HTML解析器内部运行流程 3. 如何解析不同的内容 3.1 解析HTML注释 3.2 解析条件注释 3.3 解析DOCTYPE 3.4 解析开始标签 3.5 解析结束标签 3.6 解析文本 4. 如何保证AST节点层级关系 5. 回归源码 5.1 HTML解析器源码 5.2 parseEndTag函数源码 6. …

前端(二十七)——封装指南:Axios接口、常用功能、Vue和React中的封装技术

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;前端封装指南&#xff1a;Axios接口、常用功能、Vue和React中的封装技术 本文目录 小引前端封装以真实项目举个例子 Axios接口封装常用功能封装封装 Vue中的封装技术React中的封装技术Vue和React封装…

Istio复习总结:xDS协议、Istio Pilot源码、Istio落地问题总结

1、xDS协议 1&#xff09;、xDS是什么 xDS是一类发现服务的总称&#xff0c;包含LDS、RDS、CDS、EDS以及SDS。Envoy通过xDS API可以动态获取Listener&#xff08;监听器&#xff09;、Route&#xff08;路由&#xff09;、Cluster&#xff08;集群&#xff09;、Endpoint&…

Map和Set(哈希表)

目录 map&#xff1a; map说明&#xff1a; Map.Entry的说明&#xff1a;,v> Map 的常用方法: 演示&#xff1a; 注意&#xff1a; TreeMap和HashMap的区别 Set&#xff1a; 常见方法说明&#xff1a; 注意&#xff1a; TreeSet和HashSet的区别 哈希表: 冲突&a…

19 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 中等 相关标签 相关企业 提示 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 这段代码使用了双指针的方法&#xff0c;其中一个指针先走 n 步&#xff0c;然后两个指针一起走&#xff0c;直到第一…

一文看懂春晚刘谦魔术

魔术步骤 step1: 准备4张牌,跟随魔术步骤,见证奇迹 step2: 将4张牌平均斯成两份,并叠在一起 step3: 将牌堆顶数量为名字字数的牌移到牌堆底 step4: 将前三张牌放在牌堆中间并取出牌堆顶的一张牌放到屁股下 step5: 南方人、北方人、不确定分别取顶上的1/2/3张牌插入牌堆…

17 ABCD数码管显示与动态扫描原理

1. 驱动八位数码管循环点亮 1.1 数码管结构图 数码管有两种结构&#xff0c;共阴极和共阳极&#xff0c;ACX720板上的是共阳极数码管&#xff0c;低电平点亮。 1.2 三位数码管等效电路图 为了节约I/O接口&#xff0c;各个数码管的各段发光管被连在一起&#xff0c;通过sel端…

《数字图像处理-OpenCV/Python》连载:形态学图像处理

《数字图像处理-OpenCV/Python》连载&#xff1a;形态学图像处理 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第 12 章 形态学图像处理 形态学图像处理是基于形状的图像处理&…

Android的常用Drawable讲解

今天来讲讲Android开发中水都绕不开的东西----drawable。最常使用的莫过于通过XML所声明的Drawable作为View背景&#xff0c;通过代码创建的应用场景则较少。其有着使用简单&#xff0c;比自定义view的成本要低的特点。同时&#xff0c;非图片类型的drawable占用空间较小&#…

【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 文章目录 【Kotlin语言学习】系列文章一、Kotlin介绍二、学习路径 一、…