原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/pcl_plotter.html#pcl-plotter

PCLPlotter类

PCLPlotter类提供了非常直接简单的接口用于绘制图表。它内置了所有种类图表的工具库:从多项式函数到直方图,而不用另外的软件(如Matlab)。

下面的代码片段简单是展示了PCLPlotter类的使用:

#include<vector>
#include<iostream>
#include<utility>
#include<pcl/visualization/pcl_plotter.h>int
main()
{//定义一个plottter类pcl::visualization::PCLPlotter * plotter = new pcl::visualization::PCLPlotter();//定义一个多项式函数//y=x^2,x^2的下标为1,常数项为0// 0 0 1std::vector<double> func1(3, 0);func1[2] = 1;//将多项式添加进plottter中//X 轴的区间范围:[-10, 10] as the range in X axis and "y = x^2" as titleplotter->addPlotData(func1, -10, 10, "y=x^2");//显示图表,完成plotter->plot();return 0;}

运行结果,显示一个简单的y=x^2的曲线:

基本代码结构

PCLPlotter

...
//1. 声明绘图对象
pcl::visualization::PCLPlotter *plotter = new PCLPlotter ("My Plotter");...
//2. 使用addPlotData() 函数添加绘图所需的函数或者数据
plotter->addPlotData();...
//3. 如果需要,还可以设置窗口属性
plotter->setWindowSize (900, 600);
plotter->setYTitle ("this is my own function");...
//4. 最后调用绘制函数
plotter->plot ()

绘图自动上色

用户可以王addPlotData()函数里传入自己定义的颜色,如果不进行设置,绘图对象plotter将会根据一种颜色模式自动上色。默认的颜色模式是 vtkColorSeries::SPECTRUM,包含了整个光谱的七种颜色。其他的颜色模式是:

  • vtkColorSeries::WARM
  • vtkColorSeries::COOL
  • vtkColorSeries::BLUES
  • vtkColorSeries::WILD_FLOWER
  • vtkColorSeries::CITRUS

用户可以使用setColorScheme()函数来改变颜色模式。为了反映改变颜色模式带来的效果,用户要再调用addPlotData()函数之前调用setColorScheme()函数。

不同类型的绘图输入

点对应关系(双数值输入)

这是提供输入的最基本方式。坐标(x,y)作为输入,可以在addPlotData中使用std::vector<std::pair>

#include<vector>
#include<iostream>
#include<utility>
#include<pcl/visualization/pcl_plotter.h>int
main()
{//定义一个plottter类pcl::visualization::PCLPlotter * plotter = new pcl::visualization::PCLPlotter();std::vector<std::pair<double, double> > data;//设置数据data.push_back({ 1,1 });data.push_back({ 2,2.5 });data.push_back({ 4.9,1.6 });data.push_back({ 5.7,6.7 });data.push_back({ 6.8,4.3 });data.push_back({ 5.8,7.3 });data.push_back({ 2.8,9.3 });data.push_back({ 0.8,2.3 });plotter->addPlotData(data, "test");//显示图表,完成plotter->plot();return 0;}

运行效果:

可以看到,所有的点按照顺序连接在了一起。

双数值的另一种输入方式是通过两个相同长度的数组,输入双数值的X值和Y值。

文件输入(表格)

与上一个相同,只是用户将对应关系的点存储在文本文件中,以空格隔开形成表格的形式。这是使用MS Excel绘图的一种替代方法。下面是一个非常简单,可执行的示例,展现了MS Excel 绘图的功能:

#include<pcl/visualization/pcl_plotter.h>int
main (int argc, char ** argv)
{pcl::visualization::PCLPlotter * plotter = new PCLPlotter ();plotter->addPlotData (argv[1]);//文件名为参数传入plotter->plot ();return 0;
}

data.txt文件中数据(数字之间用空格隔开):

1 2
3 4
5 6
7 8
9 10
8.8 7.7
6.6 5.5
4.4 3.3
2.2 1.1

在命令行中调用exe文件,并传入data.txt的文件名:

显示效果:

多项式和有理函数

多项式是由系数向量定义的,而有理函数则是由多项式对(分子和分母对)定义的。

 std::vector<double>func1(1, 0);func1[0] = 1;//func1多项式为分子,x^0 的系数为1std::vector<double>func2(3, 0);func2[0] = 6; //func2多项式为分母,x ^ 0 的系数为6func2[1] = 1;//x^1 的系数为1func2[2] = 1;//x^2 的系数为1//此时的图形为:func1/func2 = 1/(x^2 + x^1 + 6)//X 轴的区间范围:[-10, 10]plotter->addPlotData(std::make_pair(func1, func2), -10, 10, "1/(x^2 + x^1 + 6)");//显示图表,完成plotter->plot();

自定义的显示函数

用户可以指定自定义的函数运行。f用于描述对应关系:Y=f(X),形式为回调函数:

double getSquare(double val) {return val * val;
}...plotter->addPlotData(getSquare, -10, 10, "Square");//显示图表,完成plotter->plot();

此时的自定义函数为Y = X * X:

添加其他绘图属性和装饰

添加的绘图属性可以是标题,背景颜色和说明等。在plot()函数调用前,可以在任意时候使用这些函数:

plotter->setTitle ("My plot"); //global title
plotter->setXTitle ("degrees");
plotter->setYTitle ("cos");
plotter->setShowLegend (true); //show legends
...
plotter->plot ();

其他功能

不同于对已定义好的双数值的绘制功能,PCLPlotter还提供了一些重要的绘制功能,其中包括特征直方图绘制功能和类PCLHistogramVisualizer的所有功能。

绘制直方图

PCLPlotter就像Matlab提供的hist()函数一样,提供了一个非常方便的直方图绘制函数。它将原始数据按照其频率分类,并将其绘制成条形图。

PCLHistogramVisualizer 是以前版本中绘制直方图的类,所有功能已经被包含在类PCLPlotter中。

显示绘图

可以使用plot()函数显示所有的绘制。PCLPlotter同样提供spin()函数,用于动画或者时间更新的显示。

...//data and callback defined here
...plotter->addPlotData (func1, -10, 10, "y = x^2");
plotter->spinOnce (2000);    //display the plot for 2 secondsplotter->clearPlots ();
plotter->addPlotData (identity,-10, 10,"identity");
plotter->spinOnce (2000);plotter->clearPlots ();
plotter->addPlotData (abs,-5, 5,"abs");
plotter->spinOnce (2000);
...

测试用例

#include<vector>
#include<iostream>
#include<utility>
#include<cmath>
#include<pcl/visualization/pcl_plotter.h>using namespace pcl::visualization;void
generateData(double *ax, double *acos, double *asin, int numPoints)
{double inc = 7.5 / (numPoints - 1);for (int i = 0; i < numPoints; ++i){ax[i] = i * inc;acos[i] = std::cos(i + inc);asin[i] = sin(i + inc);}
}
//-----------------------定义Y= f(X)的回调函数-------------------
double
step(double val)
{if (val > 0)return (double)(int)val;elsereturn (double)((int)val - 1);
}double
identity(double val)
{return val;
}int
main(int argc, char** argv)
{//定义一个plottter类pcl::visualization::PCLPlotter * plotter = new pcl::visualization::PCLPlotter();//设置一些属性plotter->setShowLegend(true);//生成对应点int numPoints = 69;double ax[100], acos[100], asin[100];generateData(ax, acos, asin, numPoints);//添加绘制的数据plotter->addPlotData(ax, acos, numPoints, "cos");plotter->addPlotData(ax, asin, numPoints, "sin");//显示3秒plotter->spinOnce(3000);plotter->clearPlots();//-------------绘制隐式函数和自定义函数-------------------//设置Y轴区域plotter->setYRange(-10, 10);//定义多项式std::vector<double> func1(1, 0);func1[0] = 1;//y=1std::vector<double> func2(3, 0);func2[2] = 1;//y=x^2plotter->addPlotData(std::make_pair(func1, func2), -10, 10, "y = 1/x^2", 100, vtkChart::POINTS);plotter->spinOnce(2000);plotter->addPlotData(func2, -10, 10, "y = x^2");plotter->spinOnce(2000);//callbacksplotter->addPlotData(identity, -10, 10, "identity");plotter->spinOnce(2000);plotter->addPlotData(std::abs, -10, 10, "abs");plotter->spinOnce(2000);plotter->addPlotData(step, -10, 10, "step", 100, vtkChart::POINTS);plotter->spinOnce(2000);plotter->clearPlots();//一个简单的动画std::vector<double> fsq(3, 0);fsq[2] = -100;//y=x^2;while (!plotter->wasStopped()){if (fsq[2] == 100) fsq[2] = -100;fsq[2]++;char str[50];//sprintf(str, "y=%dx^2", (int)fsq[2]);plotter->addPlotData(fsq, -10, 10, str);plotter->spinOnce(100);plotter->clearPlots();}return 0;}

PCL教程-PCLPlotter图表可视化类相关推荐

  1. PCL教程-点云配准之成对逐步配准(两两配准)

    原文链接:How to incrementally register pairs of cloudshttps://pcl.readthedocs.io/projects/tutorials/en/l ...

  2. Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略

    Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略 目录 利用Excel自带筛选功能统计各个字段不同类别及其个 ...

  3. TensorFlow教程之进阶指南 3.4 TensorBoard: 图表可视化

    本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. TensorFlow 图表计算强大而又复杂,图表可视化在理解和调试时显得非常有帮助. 下面是一个运作时的可式化例子 ...

  4. TensorFlow 教程 --进阶指南--3.9TensorBoard: 图表可视化

    TensorFlow 图表计算强大而又复杂,图表可视化在理解和调试时显得非常有帮助. 下面是一个运作时的可式化例子. "一个TensorFlow图表的可视化") 一个TensorF ...

  5. [PCL教程]PCL漫游之Registration,Visualization

    目录 9 配准 Registration 9.1 配准基础 9.2 迭代最近点 ICP 9.2 递增地配准点云 9.3 正态分布变换 NDT 9.3.1 基本原理 9.3.2 代码解读 9.4 交互式 ...

  6. PCLVisualizer可视化类

    PCLVisualizer可视化类是PCL中功能最全的可视化类,与CloudViewer可视化类相比,PCLVisualizer使用起来更为复杂,但该类具有更全面的功能,如显示法线.绘制多种形状和多个 ...

  7. Highmaps网页图表教程之图表配置项结构与商业授权

    Highmaps网页图表教程之图表配置项结构与商业授权 Highmaps图表配置项结构 Highmaps最核心的部分就是图表配置项.用户通过图表配置项来对标题进行定制,从而实现自己所要的效果.所以,掌 ...

  8. 网页图表Highcharts实践教程之图表区

    网页图表Highcharts实践教程之图表区 网页图表Highcharts图表区 图表区是图表的基本区域.所有的数据和图形都是绘制在图表区中.从图形绘制范围来分,图表区域分为外层图表区和绘图区.本章将 ...

  9. 图表可视化seaborn风格和调色盘

    seaborn是基于matplotlib的python数据可视化库,提供更高层次的API封装,包括一些高级图表可视化等工具. 使用seaborn需要先安装改模块pip3 install seaborn ...

最新文章

  1. oracle 删除补全日志组_【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)...
  2. C++引用不能绑定到临时数据
  3. Word中以交叉引用的方式插入参考文献
  4. Equals 和 == 的区别
  5. BCP timeout prevention - 每秒刷新一次 Fiori
  6. [开源JVM] yvm - 自制Java虚拟机
  7. python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium
  8. JavaScript基础 -- js常用内置方法和对象
  9. Nacos服务发现实践
  10. SpringBoot总结之CommandLineRunner
  11. 如何删除 Mac 上的 Office 许可证文件?
  12. ThinkPHP去除url中的index.php
  13. Absolute Enable Right Click Copy 简单快速解除滑鼠右键使用限制
  14. 计算机格式字体颜色,电脑怎么设置不同的字体颜色样式
  15. 山东大学博士 计算机 统考,报考山大统招博士需谨慎
  16. 假设银行一年整存零取的月息为1.875%(年息为12*1.875%,年息按复利计算),现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子来年的教育金,到第5年孩子毕业时刚好取完这
  17. 程序员的浪漫而简单:新年祝福语
  18. java串口通信读取电子秤RS232
  19. 文件夹exe病毒的临时解决方案
  20. 当前的网卡配置及虚拟网卡设置及默认网卡配置

热门文章

  1. 哈尔滨工程大学计算机调剂人多么,哈尔滨工程大学2020招调剂生,缺额1042人,截止到5月20日...
  2. 电脑如何设置桌面应用图标、图标大小、浏览器网页显示大小
  3. 第一次自考学习------学习方法
  4. IDEA版本选择下载
  5. IDEA创建maven项目报错Error running‘[org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate]‘:
  6. 猎豹浏览器收藏内容恢复
  7. 浅谈IDEA中JBDC的简单增删查改操作及简单封装
  8. 新概念英语二,Lesson 2
  9. golang中的随机数rand
  10. 注册香港公司-香港注册公司的七大误区