matplotlib-cpp
Matplotlib-cpp是一个用在C++中绘制表的开源库。他提供了与Python的Matplotlib库类似的功能,使得在C++环境下进行数据可视化变得更加便捷。基于Matplotlib-cpp,我们可以使用各种绘制函数和样式选项来创建各种类型的图表,包括折线图、散点图、柱状图等。
它和C++语法和数据结构紧密结构,方便在C++项目中进行图表绘制和数据分析。
install
git clone https://github.com/lava/matplotlib-cpp.git
需要的依赖
sudo apt-get install python3-dev python3-pip
pip3 install matplotlib numpy
目录架构
.
├── build
├── CMakeLists.txt
├── matplotlibcpp.h
└── test1.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
set(CXX_STANDARD_REQUIRED 17)
project(matplotlib-cpp)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(test test1.cpp matplotlibcpp.h)
target_link_libraries(test ${PYTHON_LIBRARIES})
使用
1.引入库
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
2.绘制折线图(plot)
std::vector<double> x = {0, 1, 2, 3, 4};
std::vector<double> y = {0, 1, 4, 9, 16};
plt::plot(x,y); //绘制 x 和 y 之间的折线图
plt::show(); //显示图表
3.设置轴坐标和标签
plt::xlabel("X Axis");
plt::ylabel("Y Axis");
plt::title("My Plot Title");
4.绘制散点图(scatter)
std::vector<double> x = {0, 1, 2, 3, 4};
std::vector<double> y = {0, 1, 4, 9, 16};
plt::scatter(x,y); //绘制 x 和 y 之间的散点图
plt::show(); //显示图表
5.绘制多个图形
std::vector<double> x = {0, 1, 2, 3, 4};
std::vector<double> y1 = {0, 1, 4, 9, 16};
std::vector<double> y2 = {0, 1, 2, 3, 4};
plt::plot(x,y1); //曲线1
plt::plot(x,y2); //曲线2
plt::show(); //显示图表
6.设置图例(legend)
plt::plot(x,y1,{{"label","y = x^2"}});
plt::plot(x,y2, {{"label","y = x"}});
plt::legend(); //显示图例
plt::show();
7.子图(subplot)
plt::subplot(1,2,1);
plt::plot(x,y1);
plt::subplot(1,2,2);
plt::plot(x,y2);
plt::show();
8.设置颜色、线型和标记
plt::plot(x,y1,{{"color","red"},{"linestyle","--"},{"marker","o"}}); //红色虚线,带圆点标记
plt::show();
9.显示图表(show)和保存图表(save)
plt::show() //显示图表
plt::save("plot.png") //保存图表文件
10.柱状图(bar)
std::vector<int> test_data;
for (int i = 0; i < 20; i++) {
test_data.push_back(i);
}
plt::bar(test_data);
plt::show();
11.3D绘图(plt::plot3)
#define _USE_MATH_DEFINES
#include "../matplotlibcpp.h"
#include <cmath>
namespace plt = matplotlibcpp;
int main()
{
std::vector<double> x, y, z;
double theta, r;
double z_inc = 4.0/99.0; double theta_inc = (8.0 * M_PI)/99.0;
for (double i = 0; i < 100; i += 1) {
theta = -4.0 * M_PI + theta_inc*i;
z.push_back(-2.0 + z_inc*i);
r = z[i]*z[i] + 1;
x.push_back(r * sin(theta));
y.push_back(r * cos(theta));
}
std::map<std::string, std::string> keywords;
keywords.insert(std::pair<std::string, std::string>("label", "parametric curve") );
plt::plot3(x, y, z, keywords);
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
plt::legend();
plt::show();
}
可视化可以将调车时的数据show出来,让调车的过程变得清晰条理,ros里面也有相关的工具。
matplotlib-cpp
http://localhost:8091/archives/matplotlib-cpp