文章目录
matplotlibcpp是c++的库,matplotlibcpp库和python中的matplotlib库一样使用,它是python中的matplotlib库的封装,它依赖python中的matplotlib库
一、安装
matplotlibcpp库依赖python中的matplotlib库,所以需要安装上python中的matplotlib库即可
sudo apt-get install python-matplotlib python-numpy python2.7-dev
然后到GitHub上下载c++的头文件,ubuntu下使用git clone 下载就行,下载下来的文件可以放到任意位置,该位置的路径需要在cmak文件中被包含。
git clone https://github.com/lava/matplotlib-cpp
在自己工程下对应的的CMakeLists.txt文件中增加的内容在下面统一介绍。
二、库简单例子使用
如果使用vscode编程需要在c_cpp_properties.json文件下增加matplotlibcpp库所在路径。 github中有更多例子
最简单的基本使用方法:
例子一:
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
int main() {
plt::plot({1,3,2,4});
plt::pause(2); //最好加上该句,否则有时候显示不了图像,或者图像显示很慢
plt::show();
}
例子二:
#include "matplotlibcpp.h"
#include <vector>
#include <cmath>
namespace plt = matplotlibcpp;
int main() {
std::vector<double> t(1000);
std::vector<double> x(t.size());
for(size_t i = 0; i < t.size(); i++) {
t[i] = i / 100.0;
x[i] = sin(2.0 * M_PI * 1.0 * t[i]);
}
plt::xkcd();
plt::plot(t, x);
plt::title("AN ORDINARY SIN WAVE");
plt::save("xkcd.png");
}
三、CMakeLists.txt文件
如果 CMake 版本<= 3.11:
add_compile_options(-std=c++11)
##python
find_package(PythonLibs 2.7)
#include_directories(${PYTHON_INCLUDE_DIRS}) #使用这方式可以替代下面这行
target_include_directories(myproject PRIVATE ${PYTHON_INCLUDE_DIRS})
##matplotlibcpp
include_directories("/home/jack/slam_book/thirdparty/matplotlib-cpp/") #路径需要根据自己路径做调整
target_link_libraries(myproject ${PYTHON_LIBRARIES})
CMake 3.12 以后版本 推荐使用下面方式:
add_compile_options(-std=c++11)
##python
find_package(Python2 COMPONENTS Development NumPy)
#include_directories(${PYTHON_INCLUDE_DIRS}) #使用这方式可以替代下面这行
target_include_directories(myproject PRIVATE ${Python2_INCLUDE_DIRS} ${Python2_NumPy_INCLUDE_DIRS})
##matplotlibcpp 下面路径需要根据自己路径做调整
include_directories("/home/jack/slam_book/thirdparty/matplotlib-cpp/")
target_link_libraries(myproject Python2::Python Python2::NumPy)
四、库的相关绘制样式
4.1线条相关属性标记设置:
线条风格linestyle或ls 描述
‘-‘ 实线
‘:’ 虚线
‘–’ 破折线
‘None‘、‘‘,’’ 什么都不画
‘-.’ 点划线
4.2线条标记
标记maker 描述
‘o’ 圆圈
‘.’ 点
‘D’ 菱形
‘s’ 正方形
‘h’ 六边形1
‘*’ 星号
‘H’ 六边形2
‘d’ 小菱形
‘_’ 水平线
‘v’ 一角朝下的三角形
‘8’ 八边形
‘<’ 一角朝左的三角形
‘p’ 五边形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加号
‘\ ‘ 竖线
‘None’,’’,’ ‘ 无
‘x’ X
4.3颜色缩写
字符 颜色
‘b’ 蓝色
‘g’ 绿色
‘r’ 红色
‘y’ 黄色
‘c’ 青色
‘k’ 黑色
‘m’ 洋红色
‘w’ 白色
五、库的更多使用介绍
绘制各种各样的散点图:https://www.cnblogs.com/sench/p/9522627.html
Matplotlib库学习:http://blog.itpub.net/69908432/viewspace-2660537/
python Matplotlib 可视化总结归纳(一) 折线图、散点图及其坐标轴属性设置:
https://blog.csdn.net/haikuotiankong7/article/details/90547084
python Matplotlib 可视化总结归纳(二) 绘制多个图像单独显示&多个函数绘制于一张图:
https://blog.csdn.net/haikuotiankong7/article/details/90551841
六、c++其它可视化库
6.1、 madplotlib : https://github.com/madplotlib/madplotlib 注意是 ma‘d’plot 不是ma‘t’plot
6.2、 MathGL 库 :
6.3、 root 库
6.4、 Gnuplot 库
6.5、QtChart以及与Qt相关的 库
6.6、 ChartDirector 库
注:6.2–6.6的库相关介绍可在这博客中观看:https://blog.csdn.net/chyuanrufeng/article/details/102808715
七、错误修改
若图片显示不出来,请参考下面这个错误:
error: expected ‘,’ before ‘)’ token
static_assert(sizeof(long long) == 8);
^
解决办法:
当使用cmake编译时报以上错误的时候,是因为matplotlibcpp.h文件中static_assert()使用的有问题,需要到matplotlib.h文件中对应位置更改成以下样子,即加个“,”和描述就可以啦。
static_assert(sizeof(long long) == 8, "long type must occupy 8 bytes");