C++ matplotlib 画图 Linux

news2025/1/19 22:25:50

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 COMPONENTS
  roscpp
  std_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.coloradmin.cn/o/1447278.html

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

相关文章

假期作业 10

1.整理磁盘操作的完整流程&#xff0c;如何接入虚拟机&#xff0c;是否成功识别&#xff0c;对磁盘分区工具的使用&#xff0c;格式化&#xff0c;挂载以及取消挂载 U盘接入虚拟机 在虚拟机--->可移动设备--->找到U盘---->连接 检测U盘是否被虚拟机识别 ls /dev/s…

java数据结构前置知识以及认识泛型

目录 什么是集合框架 容器 时间复杂度 空间复杂度 包装类 装箱 拆箱 引出泛型 泛型类的使用 类型推导 泛型如何编译的 泛型的上界 泛型方法静态泛型方法以及泛型上界 什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 containe…

机器学习12-基本感知器

感知器(Perceptron)是一种最简单的人工神经网络结构,由美国心理学家Frank Rosenblatt在1957年提出。它是一种单层的前馈神经网络,通常用于二分类问题。 基本感知器由多个输入节点、一个输出节点和一组权重参数组成。每个输入节点都与输出节点连接,并且具有一个对应的权重参…

html的格式化标签和图片(img)标签

格式化标签 加粗: strong标签和b标签倾斜: em标签和i标签删除线: del标签和s标签下划线: ins标签和u标签 <strong>stong 加粗</strong><b>b 加粗</b><em>倾斜</em><i>倾斜</i><del>删除线</del><s>删除线…

Linux操作系统基础(十三):Linux安装、卸载MySQL

文章目录 Linux安装、卸载MySQL 一、卸载系统自带的mariadb-lib 二、上传安装包并解压 三、按顺序安装 错误1: 错误2: 错误3: 错误4: 四、初始化数据库 五、目录授权&#xff0c;否则启动失败 六、启动msyql服务 七、查看msyql服务的状态 八、在/var/log/mysqld.l…

C语言—基础数据类型(含进制转换)

进制转换不多&#xff0c;但我觉得适合小白(我爱夸自己嘿嘿) 练习 1. 确认基础类型所占用的内存空间(提示&#xff1a;使用sizeof 运算符)&#xff1a; 在这里我说一下&#xff0c;long 类型通常占用 4 字节。在 64 位系统上&#xff0c;long 类型通常也可为 8 字节。 格式…

Windows搭建docker+k8s

安装Docker Desktop 从官网下载&#xff0c;然后直接安装即可&#xff0c;过程很简单&#xff0c;一直Next就行。 有一点需要注意就是要看好对应的版本&#xff0c;因为后边涉及到版本的问题。 https://www.docker.com/products/docker-desktop 安装完成&#xff0c;双击图…

C++,stl,map/multimap详解

目录 1.map的构造和赋值 2.map的大小和交换 3.map的插入和删除 4.map的查找和统计 5.map的排序 1.map的构造和赋值 #include<bits/stdc.h> using namespace std;void print(map<int,int> &mp) {for(map<int,int>::iterator it mp.begin(); it ! m…

泛型(Java)

一、定义 定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff0c;成为泛型类、泛型接口、泛型方法&#xff0c;统称为泛型。 如下需要的结果类型是String&#xff0c;实际的是obj&#xff0c;那么我们来看看强制类型转换以后会发生什么&#xff1a; 报…

深入了解JavaScript混淆工具:jsjiami.v6

JavaScript混淆工具在前端开发中发挥着重要的作用&#xff0c;帮助开发者保护源代码&#xff0c;减少代码被轻易破解的风险。其中&#xff0c;jsjiami.v6 是一款备受开发者关注的混淆工具之一。本文将深入介绍jsjiami.v6的基本原理和使用方法&#xff0c;并通过案例代码演示其效…

《A++ 敏捷开发》- 8 获取高层支持

我&#xff1a;对过程改进来说&#xff0c;最重要的成功要素是什么&#xff1f; 客户&#xff1a;最难的是如何得到高层的支持&#xff0c;这不仅仅是嘴巴说说而已&#xff0c;而是要切实地给人、给时间。高层往往不清楚什么是质量改进的重点&#xff0c;但他们对员工的人均收入…

【Web】CVE-2021-31805 s2-062漏洞复现学习

目录 Struts2介绍 漏洞概况 OGNL与Struts2 简单原理 漏洞复现 正向rce 反弹shell payload分析 Struts2介绍 Struts 2 是一个流行的用于构建 Java Web 应用程序的开源 Web 应用程序框架。它是 Apache 软件基金会下的一个顶级项目&#xff0c;是 Struts 框架的升级版本。…

29.方法引用

方法引用 1. 概述2.引用静态方法2.1 概述2.2 代码示例 3. 引用成员方法3.1 概述3.2 分类3.2.1 其他类3.2.2 本类3.2.3 父类 3.3 代码示例 4. 引用构造方法4.1 概述4.2 代码示例 5. 使用类名引用成员方法5.1 概述5.2 代码示例 6. 引用数组的构造方法6.1 概述6.2 代码示例 7. 注意…

【Vue】computed与watch

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue⛺️稳重求进&#xff0c;晒太阳 计算属性 概念&#xff1a;基于现有的数据&#xff0c;计算出来新的属性&#xff0c;依赖的数据变化&#xff0c;自动重新计算 语法&#xff1a; 声明…

蓝牙BLE学习-安全

1.基本概念 蓝牙标准规定了5种基本的安全服务 身份验证:根据通信设备的蓝牙地址验证其身份。蓝牙不提供本地用户身份验证。保密性:确保只有授权的设备才能访问和查看传输的数据&#xff0c;防止窃听造成的信息泄露。授权(Authorization):在允许设备使用某项服务之前&#xff…

Vue-自定义属性和插槽(五)

目录 自定义指令 基本语法 (全局&局部注册) 指令的值 练习&#xff1a;v-loading 指令封装 总结&#xff1a; 插槽&#xff08;slot&#xff09; 默认插槽 插槽 - 后备内容&#xff08;默认值&#xff09; 具名插槽 具名插槽基本语法: 具名插槽简化语法: 作…

可视化工具:将多种数据格式转化为交互式图形展示的利器

引言 在数据驱动的时代&#xff0c;数据的分析和理解对于决策过程至关重要。然而&#xff0c;不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题&#xff0c;一种强大的可视化工具应运而生。这个工具具有将多种数据格式&#xff08;包括JSON、YAML、XML、C…

调用讯飞火星AI大模型WebAPI

调用讯飞火星AI大模型 记录一次调用讯飞AI大模型的过程 官方文档 首先&#xff0c;去官网申请资格&#xff0c;获得必要秘钥等 再编写url&#xff0c;该url存在编码要求&#xff0c;具体看官网url编写 具体代码如下&#xff1a; getWebsocketUrl() {return new Promise((resol…

格式化字符串的简单学习

文章目录 Format String格式化字符串函数格式化字符串参数原理 这几天学的少&#xff0c;过完年就一直在走亲戚&#xff08;现在看到肉就犯恶心 Format String 格式化字符串函数可以接受可变数量的参数&#xff0c;并将第一个参数作为格式化字符串&#xff0c;根据其来解析之…

ChatGPT高效提问—prompt实践(视频制作)

ChatGPT高效提问—prompt实践&#xff08;视频制作&#xff09; 1.1 视频制作 ​ 制作视频对于什么都不懂的小白来说非常难。而随着AI技术的发展&#xff0c;这件事变得越来越简单&#xff0c;如今小白也可以轻松上手。如何借助ChatGPT来制作短视频。 ​ 其实方法非常简单&a…