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
作者
zz
发布于
2024年09月27日
更新于
2024年09月28日
许可协议