tchart 靜態圖表

5.1.1  靜態圖表分析技術

靜態圖表是指不需要通過連接數據庫提供數據,而繪製出的圖表。靜態圖表主要通過TChart組件實現,通過該組件可以以圖表的形式來對數據進行分析。該組件提供的圖表類型包括折線圖表(Line)、條型圖表(Bar)、區域圖表(Area)、點型圖表(Point)、餅型圖表(Pie)、甘特圖表(Gantt)、箭型圖表(Array)、泡沫圖表(Bubble)、圖形圖表(Shape)等。下面對圖表的常用樣式進行具體介紹。

折線圖表(Line)用於顯示等時間間隔的變化趨勢,主要強調時間性和變動率,折線圖的分類軸通常表現爲時間,例如年、季度、月份、日期等。如圖5.1所示。

圖5.1  折線圖表

條型圖表(Bar)用於顯示各個項目之間的比較情況,它主要強調的是各個值之間的比較。條形圖又可以轉變成錐型圖、柱型圖、橢圓圖、箭型圖等。如圖5.2所示。

圖5.2  條型圖表

區域圖表(Area)用於表示不同數據系列之間的對比關係,強調隨時間變化的幅度,同時也顯示各數據系列與整體的比例關係。如圖5.3所示。

圖5.3  區域圖表

餅型圖表(Pie)用於表示各個數據之間的比例分配關係。餅型圖表還可以製作成分離型餅圖,它可以將一些重要的數據以餅型塊的形式分離出來。如圖5.4所示。

圖5.4  餅型圖表

點型圖表(Point)用於顯示單個或者多個數據系列的數據在某種間隔條件下的變化趨勢。

1.圖表類型的生成

在製作圖表之前首先要添加圖表類型,添加圖表類型有兩種方法,一種方法是通過雙擊TChart組件,在打開的對話框中單擊“ADD”按鈕,然後在打開的“TeeChart Gallery”對話框中選擇相應的圖表類型。此種方法適用於使用某種固定圖表類型的情況。

當製作的圖表種類繁多或個數不一時,可以通過TChart組件的AddSeries()方法來動態創建圖表類型,該方法的語法格式如下:

procedure AddSeries(ASeries : TChartSeries);

參數ASeries表示一個圖表組件,該方法可以動態加載的類型有:TLineSeries(拆線圖)、TAreaSeries(區域圖)、TPointSeries(點型圖)、TPieSeries(圓餅圖)、TBarSeries(條型圖)、THorizBarBarSeries(水平條型圖),在使用以上類型時,必需在單元中添加Series單元。下面用一個小例子來進行說明:

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

..

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var

  myseries :TBarSeries;

begin

  myseries := TBarSeries.Create(myseries);  //創建一個圖表類型

  chart1.AddSeries(myseries);

  myseries.AddArray([1,6,5,9,8,7,12,5,23]);

end;

動態創建圖表也可以直接用圖表類型來進行創建,主要是用圖表類型的Create()方法來創建一個對象,再通過該對象的ParentChart屬性來設置其父級窗體(Chart1),然後對圖表進行控制,下面以條型圖爲例實現動態創建圖表。

  myseries := TBarSeries.Create(myseries);

  myseries.ParentChart:=chart1;

  myseries.AddArray([1,6,5,9,8,7,12,5,23]);

2.在圖表中添加數據

在添加完圖表類型後,需要在圖表上添加數據信息,添加數據信息的方法有很多,通過AddArray()、AddXY()、Add()方法都可以實現。

l          AddArray()方法

在圖表中批量添加數據信息,其語法如下:

Function AddArray(const Values:Array of Double):Integer;

參數Values是一個雙精度型的數組,用於記錄所有數據的值。

l          AddXY()方法

在圖表中X軸和Y軸上的指定位置添加數據信息。語法如下:

Function AddXY(const AXValue : Double;Const AYValue : Doule;const Alabel : String;

Acolor : TColor):Integer;

參數AXValue表示在圖表中添加數據的X軸位置,參數AYValue表示添加數據的高度,也就是數據量,參數Alabel表示添加數據的名稱,參數TColor表示在圖表中添加數據塊的顏色。通過該方法可以在圖表的X軸上的任意位置添加數據,其應用如下:

  Chart1.Series[0].AddXY(1,10,'addxy',cllime);  //可以按X軸的任意位置進行添加

  Chart1.Series[0].AddXY(0,0,'addxy',cllime);

  Chart1.Series[0].AddXY(2,30,'addxy',cllime);

  Chart1.Series[0].AddXY(3,50,'addxy',cllime);

l          Add()方法

按照指定的順序將數據添加到圖表中。語法如下:

Function Add(const Avalue : Double;const Alabel : Srting;AColor : TColor):Integer;

參數Avalue表示要添加數據的數量,參數Alabel表示要添加數量的名稱,參數AColor表示添加數據塊的顏色。該方法是以添加的順序在圖表中進行顯示,與AddXY()方法不同,當添加的順序改變時,圖表中數據的順序也會改變。其應用如下:

  Chart1.Series[0].Add(30,'打印機',clTeeColor);

  Chart1.Series[0].Add(10,'主板',clTeeColor);

  Chart1.Series[0].Add(20,'掃描儀',clTeeColor);

  Chart1.Series[0].Add(50,'顯示器',clTeeColor);

  Chart1.Series[0].Add(30,'CPU',clTeeColor);

3.圖表背景效果的設置

添加完數據以後,就可以製作出一個最基本的圖表,爲了使圖表更加美觀,可以爲圖表設置背景顏色。通過Color屬性可以設置圖表的背景顏色,通過Gradient屬性還可以設置圖表背景顏色的漸變效果,該屬性中包含了Visible、EndColor、StartColor屬性,當Visible屬性爲True時,纔可以利用EndColor、StartColor和Direction屬性對背景顏色進行漸變設置。在用Direction屬性設置表格背景的漸變效果時,應在單元中添加TeCanvas單元,其漸變效果的樣式有:gdbottomtop(從下向上漸變)、gdtopbottom(從上向下漸變)、gdRightLeft(從右向左漸變)、gdLeftRight(從左向右漸變)、gdfromcenter(從中間向四邊漸變)、gdfromtopleft(左上角漸變)、gdfrombottomleft(左下角漸變)。下面用一個小例子來實現如何對圖表背景進行漸變效果。

  Chart1.Gradient.Visible := True;

  Chart1.Gradient.EndColor := clLime;

  Chart1.Gradient.StartColor := clWhite;

  Chart1.Gradient.Direction := gdRightLeft;

4.圖表矩形區域的高亮度顯示

在圖表中顯示數據信息後,通過X軸和Y軸會形成一個矩形區域,數據將顯示在該區域內。通過對矩形區域的高亮度顯示,可以使圖表具有另一種風格。有三種方法可以實現:

一是用BackColor屬性對圖表的矩形區域進行填充顏色;

二是用Canvas屬性下的Frame3D()方法在指定的矩形區域中畫框。

Frame3D()方法的語法格式如下:

Procedure Frame3D(Rect : Trect;TopColor : TColor;BottomColor : TColor;Width : Integer);

參數Rect表示矩形區域;參數TopColor表示左邊框和上邊框的顏色;參數BottomColor表示右邊框和下邊框的顏色;參數Width表示邊框的寬度。下面用一個小例子來實現在矩形區域中畫邊框。

  With Chart1,Canvas do

  begin

    Brush.Style:=bsClear;

    Pen.Color:=clRed;

    Frame3D(ChartRect,clRed,clBlue,2);

  end;

其中TChart組件的ChartRect屬性用於確定圖表中座標軸所組成的矩形區域。

三是用Frame屬性設置圖表框架(線條)。

Frame屬性包含Color、Style、Width屬性,它們分別表示框架的顏色、風格及寬度。下面用一個小例子對圖表的框架進行設置。

procedure TForm1.FormCreate(Sender: TObject);

begin

  Chart1.Frame.Color := clBlue;

  Chart1.Frame.Style := psSolid;

  Chart1.Frame.Width := 2;

end;

當然,爲了能夠更好的區分圖表中的各個數據,可以將每個數據的數據塊以不同的顏色進行顯示。除餅型圖表外,其他的圖表在生成以後,其數據塊的默認顏色爲紅色,可以通過ColorEachPoint屬性的設置來改變數據塊的顏色,當該屬性爲False時,數據塊的顏色爲默認顏色,否則,將根據該組件所分配的默認隨機顏色來設置各數據塊的顏色。

5.在圖表中添加標題或文本

在製作圖表後,爲了能夠使觀察者清楚圖表的用處,可以在圖表中添加標題或文本,對其進行說明。可以利用LeftAxis、RightAxis、TopAxis、BottomAxis屬性分別在圖表的左側、右側、上方和下方添加標題。下面以LeftAxis屬性爲例,在圖表的左側添加一個標籤。

  Chart1.LeftAxis.Title.Caption := '2005年產品銷售圖表';

  Chart1.LeftAxis.Title.Font.Size := 8;

  Chart1.LeftAxis.Title.Font.Color := clBlue;

Foot屬性用於設置圖表底部的文本和格式。在該屬性中還包含了Text、Alignment、Font等屬性,分別用於獲取顯示的說明文字,文字的顯示樣式及其文字的字體設置等。下面以一個小例子來進行說明。

  with Chart1.Foot do

  begin

    Text.Add('圖表的說明性文字');

    Alignment := taCenter;

    Font.Size := 8;

    Font.Color := clRed;

  end;

在圖表上進行文字說明,也可以用繪圖的形式在圖表上繪製文字,主要通過Canvas屬性的TextOut()方法在圖表上進行繪製。該方法的語法格式如下:

Procedure (x : Integer;y : Integer;const Text : String);

參數x、y表示文字顯示的起始座標;參數Text表示要顯示的文字。下面用該方法在TChart組件上進行繪製。

  Chart1.Canvas.Brush.Style := bsclear;

  Chart1.Canvas.TextOut(0,0,'2005年產品銷售圖表');

在用TextOut()方法進行繪製時,文字的背景顏色將覆蓋TChart組件,那麼,如何清空文字的背景顏色呢,這就需要將Canvas屬性的Brush的Style屬性設爲bsclear,這時,文字的背景顏色將處於透明狀態,如以上代碼所示。

爲了能使繪製的文字在圖表顯示時就直接繪製在圖表上,需要將以上代碼寫在OnAfterDraw事件中,該事件在圖表繪製後觸發。在利用畫布繪製圖表時,需要在該事件中編寫繪製代碼,這樣,在圖表重繪時,會自動調用OnAfterDraw事件,不需要用戶自己截獲Windows消息。

如果想在圖表上顯示自定義圖片,可以將以下代碼寫入OnAfterDraw事件中。這樣,在圖表顯示時,就可以將圖片繪製在圖表中。

  Chart1.Canvas.Draw(0,(Chart1.ChartHeight)div 2,Image1.Picture.Bitmap);

6.圖表的旋轉及顯示方式

在顯示圖表時,有時需要將圖表進行動態的旋轉,這樣可以使圖表以不同的角度進行顯示,View3DOptions屬性可以控制圖表的旋轉(Rotation屬性用於水平旋轉,Elevation屬性用於垂直旋轉)、移動(HorizOffset屬性用於水平移動,VertOffset屬性用於垂直移動)、縮放(zoom屬性)等操作。

通過View3DWalls屬性可以設置圖表的3D顯示效果,當屬性值爲True時,將以3D效果顯示圖表。當屬性值爲False時,將取消3D效果顯示。

當圖表以3D效果顯示時,可以用Chart3DPercent屬性設置圖表尺寸和圖表深度的顯示比例,取值在1~100之間。在設置該屬性時,不需要將圖表設爲3D效果,但以3D效果顯示,效果更加明顯。

7.對圖表的軸和網格進行設置

在對圖表進行操作時,有時需要對圖表中的網格或座標軸進行控制。

當數據太大時,Y軸的刻度值不能完全顯示出來,這樣,在觀察數據時,有時不能準確的知道數據與數據間的差距,這時,可以將LeftAxis屬性的Axis的Visible屬性設爲False,將Y軸的刻度進行細分。

在觀察圖表時,可以將LeftAxis的Labels屬性設爲False,將Y軸的刻度去掉,只顯示X軸的數據,也可以對LeftAxis的LabelStyle屬性進行設置,來改變Y軸的顯示形式,LabelStyle屬性的取值如表5.1所示。

表5.1                            Chart1ClickSeries事件的參數說明

參數

描述

talAuto

自動顯示Y軸的樣式

talNone

不顯示Y軸的刻度

talValue

以數值型顯示Y軸的刻度

talMark

以SeriesMarks樣式在Y軸上顯示標籤

talText

以XLabels字符串型在Y軸上顯示標籤

8.對圖表數據的相關操作

當圖表中的數據太多時,可以將圖表進行分頁顯示,那麼,如何對圖表進行分頁呢?怎樣才能對分頁的圖表進行翻頁呢?並在翻頁的同時,顯示其頁數?解決以上問題其實很簡單,在圖表重繪前,可以用MaxPointsPerPage屬性來實現圖表的分頁,將該MaxPointsPerPage屬性設置爲指定的數字,每頁將按設定的個數進行顯示;將Page屬性進行加1或減1,可以實現圖表的翻頁,也可以用NextPage或PreviousPage屬性來實現;OnPageChange事件是在圖表的當前頁發生改變時觸發,可以通過該事件來顯示圖表的當前頁。

如果用戶在對圖表進行翻頁時,不想用按鈕進行控制,可以通過OnClickBackground事件在圖表上以鼠標單擊或右擊的形式,來使圖表進行上下翻頁。該事件的語法格式如下:

procedure OnClickBackground(Sender: TCustomChart; Button: TMouseButton; Shift:

 TShiftState; X, Y: Integer);

該事件在用戶單擊或右擊座標軸、圖表及圖例時觸發。參數Sender表示觸發事件的對象,Button表示觸發事件時單擊的鼠標按鈕,Shift表示功能鍵,X、Y表示鼠標點的座標。下面用一個小例子來實現圖表的翻頁。

procedure TForm1.Chart1ClickBackground(Sender: TCustomChart;

  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

  if Button = mbLeft then

    Chart1.NextPage

  else if Button = mbRight then

    Chart1.PreviousPage;

end;

有時用戶在對數據表中的數據進行觀察的時候,因數據太多,無法準確的找到要觀察的數據,TChart組件本身有一個OnClickSeries事件,該事件在用戶單擊圖表數據時觸發。用戶可以利用該事件在單擊數據時,改變其顏色,這樣就可以快速的找到要查詢的數據,也可以用該方法將有一定聯繫的數據塊設成同一種顏色。該事件的語法格式如下:

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;

  Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

OnClickSeries事件的參數說明,如表5.2所示。

表5.2                            OnClickSeries事件的參數說明

參數

描述

Sender

表示觸發事件的TChart組件

Series

表示用戶單擊的圖表對象

ValueIndex

表示圖表數據塊的索引值

Button

表示觸發事件時單擊的鼠標按鈕

Shift

表示功能鍵

X、Y

表示鼠標點的座標點

可以在該事件中添加以下語句,在圖表的數據塊上單擊鼠標時,將改變數據塊的顏色。

  Series.ValueColor[ValueIndex]:= clLime;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章