欢迎访问 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)以上代码中,xsin(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-2021,保留所有权利
E-mail: forcal@sina.com
  QQ:630715621
最近更新: 2021年05月26日