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