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