深入浅出CChart 每日一课——快乐高四第十课 见微知著,CChart内置功能介绍之数据处理篇

CChart内置数据处理功能默认是不打开的。要打开数据处理功能,请点击菜单“绘图状态-->特别功能-->允许数据处理”,这时菜单“曲线数据-->数据名”下,将多出一个“数据处理”菜单,如图所示。

可以看到,笨笨内置了四种数据处理功能,线性变换、微积分、数据平滑、数据拟合。

A10.1线性变换

“线性变换”菜单提供了三个功能,分别是偏移、缩放、变换。这三个功能都非常简单,只要看看弹出的对话框就全明白了。

可见,对于偏移功能,分别设置X、Y方向的偏移值即可,对于缩放功能,需设置缩放中心和缩放系数,对于变换功能,需设置仿射变换的6个系数。实际上,仿射变换功能完全覆盖了偏移和缩放功能。

对话框中“Reserveold data”表示变换处理后是否保留原曲线。

由于这几个功能都非常简单,就不演示效果了。

A10.2微积分

“微积分”菜单提供了两个功能,分别是微分和积分。下面是微分和积分两个功能分别弹出的对话框。

对于微分功能,微分方法分后向微分、前向微分和双向微分三种,对于积分功能,积分方法分左积分、右积分、中心积分三种。

下面先画一个正弦曲线。

选择“微分”后的状态。

选择积分后的状态。

A10.3数据平滑

“数据平滑”菜单提供了两个功能,分别是中值滤波和均值滤波。弹出的对话框如下。

在这里设置滤波的点数。

效果这里也不演示了。

A10.4数据拟合

“数据拟合”菜单提供了多种功能,笨笨添加了多项式拟合、指数函数拟合、对数函数拟合、单峰高斯函数拟合、多峰高斯函数拟合等。这些是笨笨平时用得较多的,对于其它函数,如有需要也可以添加。

下面笨笨演示一下复杂一点的多峰高斯拟合。

我们知道高斯分布的表达式为y=a*exp(-0.5*((x-b)/c)^2),其中b就是这个分布的中心位置,c代表峰的宽度,a代表峰的高度。多峰的话,就是在多个位置都有一个高斯峰。

我们画三个峰叠加,三个峰的(a,b, c)分别为(3, 2, 0.3),(2, 6,0.5),(5, 10, 0.4),另外我们还添加一个本底0.6。

这样得到的曲线如图。

我们点击多峰高斯拟合的菜单,弹出如下对话框。

由于我们这里有三个峰,GaussianPeaks应该选择3。

在Peak No下拉列表框中,选择第几个峰,然后在下面ak,bk,ck中设置该峰的初值。初值的关键是峰的位置bk不要差得太远,峰的高度ak和宽度ck无所谓。

前面已知三个峰的位置在2,6,10。我们设置三个峰bk初值分别为1.5,7,10.5。拟合后将弹出一个结果对话框。

可以看到拟合出来的结果和我们设置的初值完全一样。我们看看拟合曲线和原曲线的情况,两条曲线也完全重合。

下面我们在原曲线上加上一个随机噪声。

按上述方法拟合,拟合结果如图。

这时拟合得到的值和我们设置的初值非常接近,说明拟合成功。

可见拟合曲线完美地描述了原曲线的包络。

CChart内置数据处理功能介绍结束。当然功能还不算多,以后将根据需要继续添加。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 14:59:12

深入浅出CChart 每日一课——快乐高四第十课 见微知著,CChart内置功能介绍之数据处理篇的相关文章

深入浅出CChart 每日一课——快乐高四第十四课 枝头红杏,Win32标准控件ChartCtrl之围城

本节课笨笨继续介绍ChartCtrl控件在DuiLib中的应用. 请大家先复习高四第三课. 本节课的方法和这一课的方法差不多,由于笨笨提供了ChartCtrl这个新工具,所以编程可以有一定的简化. 首先,XML文件和高四第三课完全一样. 其次,cpp文件只有CreateControl部分有所修改,如下.当然,前面那个CChartWnd变量不需要了. virtual CControlUI* CreateControl(LPCTSTR pstrClassName) { if (_tcsicmp(ps

深入浅出CChart 每日一课——快乐高四第十一课 不离不弃,利用CChartWnd实现多区域绘图

笨笨在前面的课程里面提到,在一个窗口上不能粘多个CChartWnd,否则图像不正常,故而在高四6到8课,均使用CChart类,实现了在普通窗口.对话框窗口.DuiLib窗口上的多区域绘图. 使用CChart类必须手动处理消息,而采用CChartWnd类省去了处理消息的步骤,编程更为简便. 近几天笨笨进行了一些改进,采用CChartWnd类也可以在一个窗口上多区域绘图了. 1 首先按照前面的步骤建立一个基于Win32 Application的程序,名为LessonA11. 2 在WndProc函数

深入浅出CChart 每日一课——快乐高四第十六课 老马识途,ChartCtrl控件在WTL中的使用

这几天有个朋友想在WTL下使用ChartCtrl控件,因此笨笨在这里也写一个简单的教程. 要使用WTL当然要先安装它. 笨笨在这里介绍两个例子,一个是WTL对话框界面,一个是WTL单文档SDI界面. A16.1 WTL对话框界面 第一步,首先用AppWizard建立一个基于对话框的WTL程序LessonA16. 第二步,在主对话框资源IDD_MAINDLG上添加一个Custom Control控件,其ID设置为IDC_CHART,class设置为ChartCtrl. 第三步,拷贝库文件. 第四步

深入浅出CChart 每日一课——快乐高四第七课 铁蛋的竹马,返璞归真之对话框窗口多区域绘图

上一课笨笨给大家介绍的是在普通窗口上多区域绘图,本课将介绍对话框下的情形.由于对话框的消息循环和普通窗口有一些区别,所以在具体操作上略有不同,下面的处理过程可以供大家参考. 第一步,打开VC,建立一个基于MFC AppWizard(exe)向导的项目LessonA07.向导中选择Dialog Based,其它不做任何更改,直接点Finish. 第二步,拷贝库文件到LessonA07文件夹中, 第三步,在VC界面的资源编辑器中,删除掉对话框中间的"TODO: 在这里设置对话控制."这个标

深入浅出CChart 每日一课——快乐高四第十三课 月上柳梢,Win32标准控件ChartCtrl之牵手

上节课笨笨介绍了新增加的ChartCtrl控件,是在对话框中使用的.本节课简单介绍这个控件的另一种用法. 首先按照以前的步骤建立一个Win32Application. 增加WM_CREATE消息的响应例程如下. case WM_CREATE: HWND hW; hW = CreateWindow(_T("ChartCtrl"), _T("Cap"), WS_CHILD | WS_VISIBLE, 20, 20, 600, 400, hWnd, NULL, hInst

深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇

笨笨长期以来一直使用Origin软件画图和处理数据,但Origin软件没有编程语言的接口.笨笨开发CChart的一个潜在的目标.是想实现Origin软件的功能.当然这是一个不可能达到的目标.Origin软件的功能太强了.笨笨仅仅能膜拜. 下节课将介绍CChart内置的数据处理功能,这是笨笨向Origin的致敬. 在这之前.本节课首先介绍一下CChart内置的数据存取功能. A9.1 CChart数据保存 假定我们绘制了如图的两条曲线. 假设要保存全部曲线数据,请点击右键菜单"曲线数据-->

Day3-递归函数、高阶函数、匿名函数、内置函数

一.递归函数 定义:函数内部可以调用其它函数,如果调用自身,就叫递归. 递归特性: 1.必须有结束条件退出: >>> def calc(n): ... print(n) ... return calc(n+1) ... >>> calc(0) 0 1 ... 998 RecursionError: maximum recursion depth exceeded while calling a Python object 分析: 没有结束条件,超过最大递归次数999次后

Python学习笔记(四,迭代器、生成器、内置函数)

一.迭代器 1.迭代器定义 迭代是一个重复的过程,每次重复一次迭代,并且每次迭代的结果都是下一次迭代的初始值. l = ["aaa","bbb","ccc"] count = 0 while count< len(l): #每次重复完成后count都是下一次的初始值 print(l[count]) count+=1 需要迭代器的原因:对于序列类型str.list.tuple可以依赖索引迭代取值,对于dict.set.文件需要提供不依赖索引取

Python学习笔记四(迭代器、生成器、内置函数)

一.迭代器 1.迭代器定义 迭代是一个重复的过程,每次重复一次迭代,并且每次迭代的结果都是下一次迭代的初始值. l = ["aaa","bbb","ccc"] count = 0 while count< len(l): #每次重复完成后count都是下一次的初始值 print(l[count]) count+=1 需要迭代器的原因:对于序列类型str.list.tuple可以依赖索引迭代取值,对于dict.set.文件需要提供不依赖索引取