欢迎访问Lu程序设计
在Lu脚本中使用CChart绘图
目 录
0 概述 | 简要介绍CChart和Lu脚本并给出了例子。 |
1 普通XY图 | 最常见的曲线图,但一些例子需要代码矢量化知识。 |
2 用Plot绘制普通XY图 | 最常见的曲线图,不需要代码矢量化知识。 |
3 分裂视图 | 分裂视图可以在一个窗口上分区域同时显示多条曲线。 |
4 共享X轴视图 | 共享X轴视图每层图像共享X轴,但具有各自的Y轴,以便适应范围相差较大的不同曲线。 |
5 分层视图 | 分层视图各个图层共享绘图数据区,各自建立坐标轴。 |
6 饼图 | 饼图。 |
7 柱图 | 柱图有两种选项,普通柱图和堆叠式柱图。 |
8 等高线图 | 等高线图。 |
9 等高云图 | 等高云图与等高线图类似,只是用颜色来区分高度。 |
10 模拟示波器图 | 模拟示波器图。 |
11 3D曲线图 | 三维折线图。 |
12 3D曲面图 | 三维曲面图。 |
0 概述
CChart是一个绘制曲线的C++函数库,功能全面、调用简单。CChart由网友笨笨开发,要了解CChart,请访问CChart的官方网站:www.cchart.net。
作为一个函数库,CChart本身并不具备脚本功能,与此同时,Lu脚本也缺少一个强有力的数据可视化引擎。最近,在笨笨的大力支持下,Lu脚本成功包装了CChart,实现了独孤九剑和紫霞神功的完美配合。
在Lu脚本中使用CChart绘图的特点如下:
(1)Lu脚本包装了CChart最新发布版本的全部功能,能够绘制折线图、饼图、柱图等多种类型的图像,并且实现了等高线图等高级功能。
(2)由于CChart本身的调用非常简单,同时Lu脚本的语法非常简洁,使得图像的绘制非常简单。
(3)用实用程序OpenLu演示Lu脚本并使用CChart绘图。OpenLu非常小巧,目前只有5M左右,是免安装的绿色软件。从这里下载OpenLu开始演示。
(4)Lu是一种功能强大的脚本,短时间内要想掌握实属不易。但本教程系列从实用出发,通过丰富的实例,详尽的注释,使用户可以依葫芦画瓢似的实现自己的应用。
闲话少说,下面通过一个实例开始我们的绘图体验:
[例子1]:推荐的程序格式。
!!!using("win","math"); //使用命名空间win和math,以简化函数调用。
init(x) = //Lu脚本中的函数定义,是从等号开始的。这里定义了一个函数init,只有一个自变量参数x。
x=linspace[-5.0, 5.0, 100], //linspace(a,b,n)是命名空间math中的函数。用于产生一个一维实数数组;a、b为实数,n为整数;a和b是数组的第一个和最后一个元素,元素总数是n。
cwAddCurve{x, sin(x), 100}, //cwAddCurve(pX, pY, nLen)是命名空间win中的函数。用于在窗口中添加曲线:pX和pY是一维实数数组,nLen是数据个数。
cwAddCurve{x, x.*sin(x), 100}; //x.*sin(x)是矢量化的代码。简单地,矢量化代码中:乘号用 .* ;除号用 ./ ;乘方用 .^ ;加号和减号不变,仍然用 + 和 - 。
ChartWnd[@init]; //ChartWnd(@init)是命名空间win中的函数。用于显示窗口并在窗口创建时调用函数init,向窗口添加数据 及属性等。@表示取函数的地址。
说明:
(1)以上代码中,逗号用于分隔语句,分号表示一个表达式或者一个函数的结束。
(2)以上代码中,x、sin(x)、x.*sin(x)都是一维实数数组,这类似于matlab。如果你对这种格式不熟悉,可以使用函数Plot绘图,参考[例子6]。
图形:
在图形窗口双击,可以弹出绘图设置窗口,用户可以设置标题、图例、网格等属性,如下图:
也可以在窗口点击鼠标右键,弹出右键菜单进行相关设置,如下图;
[例子2]:推荐的程序格式。与[例子1]相比,仅仅在函数init的代码部分加了一对括号{ },这样可能更符合某些人的习惯。
!!!using("win","math");
init(x) =
{
x=linspace[-5.0, 5.0, 100],
cwAddCurve{x, sin(x), 100},
cwAddCurve{x, x.*sin(x), 100}
};
ChartWnd[@init];
[例子3]:推荐的程序格式。绘图函数单独定义。
!!!using("win","math");
f(x)=sin[x]; //一元函数定义
g(x)=x.*sin[x]; //一元函数定义
init(x) =
x=linspace[-5.0, 5.0, 100],
cwAddCurve{x, f(x), 100},
cwAddCurve{x, g(x), 100};
ChartWnd[@init];
[例子4]:不推荐的程序格式:没有使用命名空间。
init(x) =
x=math::linspace[-5.0, 5.0, 100],
win::cwAddCurve{x, sin(x), 100},
win::cwAddCurve{x, x.*sin(x), 100};
win::ChartWnd[@init];
有些人可能会追求代码简洁,Lu脚本也可以做到,但不提倡,如下例:
[例子5]:不推荐的程序格式:虽然代码简洁,但不易懂。
!!!using("win","math");
me(:x)= x=linspace[-5.0, 5.0, 100], cwAddCurve{x, sin(x), 100}, cwAddCurve{x, x.*sin(x), 100}, ChartWnd[@me];
许多人对矢量化代码不熟悉,使用Plot函数可以解决这个问题,如下例:
[例子6]:推荐的程序格式:使用Plot函数绘图。
!!!using("win");
f(x)=sin[x]; //一元函数定义
g(x)=x*sin[x]; //一元函数定义
Plot[Ix : -5.,5.,@f, @g]; //绘制函数f和g的图形,Ix指出X轴绘图范围
图形:
以上仅简单举例,更多的代码及图像见本文开头的链接。如有必要,请参考:
LuWin的说明:封装了CChart的Lu扩展动态库,所有的绘图函数都来自于该库,通过命名空间“win”输出。
LuMath的说明:Lu数学函数扩展动态库,所有函数通过命名空间“math”输出,如上面的linspace函数。
Lu的说明:Lu脚本系统的说明。
版权所有© Lu程序设计 2002-2013,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: 2013年12月13日