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 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();
}

C++ matplotlib 画图 Linux_第1张图片

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

C++ matplotlib 画图 Linux_第2张图片

#include 
#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);
		}
	}
}

C++ matplotlib 画图 Linux_第3张图片

#include 
#include "matplotlibcpp.h"
#include 

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();
}

C++ matplotlib 画图 Linux_第4张图片

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

你可能感兴趣的:(matplotlib-cpp,c++,matplotlib,linux)