歡迎訪問 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-2014,保留所有權利
E-mail: [email protected]
  QQ:630715621
最近更新: 2014年02月15日

pk10冠军百期错一