TChart的用法


TChart是一個功能強大的繪制各種數據圖表的控件,使用它可以很方便的繪制出各種數據圖表。下面就來詳細介紹它的使用。

  常用屬性:

 AxisVisible:Bool型用於顯示或隱藏圖表上的四個坐標軸以及顯示區域的曲線框

 BufferDisplay:Bool型默認為Ture.可以提高圖像的顯示速度消除閃爍

 MaxPointPerpage:默認為0,用來設置每頁可以顯示的點的數量,設置了該屬性之后,除最后一頁外,每頁都是以固定的點數顯示。(頁:表示的是TChart的大小)

 SeriesList:該屬性為一指針數組,指向的是TChart中的Series。

 獲得TChart中的Serries數組,也有三種方法
        1.MySeries := Chart1.SeriesList [ 0 ]
        2.MySeries := Chart1.Series [ 0 ]
        3.MySeries := Chart1 [ 0 ]

 SerriesCount屬性獲得SeriesList中Series的個數
 AllowZoom : Boolean
是否允許鼠標拖動來縮放圖表,通過拖拽鼠標畫出矩形可以實現區域放大
AnimatedZoom : Boolean
拖動是否顯示縮放過程
ChartHeight : LongInt
以像素為單位,運行為只讀,顯示圖表頂軸與底軸的高度,不包含頁邊距,Height包含頁邊距,
DepthAxis,LeftAxis,RightAxis,TopAxis,BottomAxis
Tchart共分為五個坐標軸,
LeftAxis,RightAxis,TopAxis,BottomAxis和DepthAxis
默認情況下只顯示LeftAxis和BottomAxis坐標軸可以通過Series屬性的子屬性HorizAxis與VertAxis進行設置
如:
chart1.Series[0].HorizAxis := aBothHorizAxis;
chart1.Series[0].VertAxis := aBothVertAxis;
chart1.BottomAxis.Title.Caption := 'nsgtao';
chart1.BottomAxis.Title.Font.Color := clRed;
Foot : TChartTitle
在圖表底部定義的文本和格式,在圖表底部顯示一些說明文字
Chart1.Foot.Text.Add('Nsgtao Foot');

Gradient : TChartGradient
用於設置圖表背景顏色:是否顯示背景色,背景色漸變的起始顏色和終止顏色,漸變方向等
方法,事件,過程:

ZoomRect或者ZoomPercent方法實現圖像縮放

 

Series類型

Series類型是TChart繪圖的核心,在我看來TChart控件只是一個容器,它存放的Series數組。根據不同類型的Series就可以畫出不同類型的圖標。從字面意思理解Series是一個序列,是一個數據點的序列,一幅圖可以由很多個這樣的數據點組成,在TChart繪制圖表實際上就是向TChart中添加數據點,TChart根據添加的點的不同類型畫出不同的圖表。Series就類似一個泛型的TList,由於Delphi沒有公布源碼,這只是我的猜測。

 Line ( TLineSeries)  用折線將序列各點連接起來的形式繪制圖表
 FastLine (TFastLineSeries) 相對Line來說,它損耗了某些屬性從而來實現快速繪制
 Bar (TBarSeries) 繪制垂直的直方圖,每個Series代表一個直方條
 Horizontal bar (THorizBarSeries) 和Bar類似只不過是水平方向的直方圖
 Area (TAreaSeries) 與Line相同,只不過還要將曲線與X軸的區域進行填充
 Point (TPointSeries) 用點的形式顯示一條數據,就好像將Line中的線去掉
 Pie (TPieSeries)  圓餅圖
 Arrow (TArrowSeries)
 Bubble (TBubbleSeries)
 Gantt (TGanttSeries)
 Sharp (TChartShape)

TSeries的方法:

Add:用於向Series添加一個新點,可以不用管該點的橫坐標,如果不添加其他可選參數的話,默認的橫坐標表示的是該段區域的數據點的個數

AddXY:添加點,參數為XY坐標

AddNull:添加值為空的點

 

1.1      [概述]
   TChart是delphi里面一個標准的圖形顯示控件。它可以靜態設計(at design time)也可以動態生成。

1.2      [繼承關系]
TObject
TPersistent
TComponent
TControl
TCustomControl
TWedgetControl
TChart
TCustomPanel

1.3      [tips]
1.3.1            Pro Version支持Bezier , Contour , Radar 和 point3D 曲線
1.3.2            支持jpeg文件的導出
1.3.3            Chart中的Series 可以連接到Table , Query , RemoteDataset(其他數據集)
1.3.4            TChart里的series的active屬性可以實現對已繪制圖形的顯示或者隱藏
1.3.5            在TChart中, tchartSeries是所有具體series的父類,沒有畫出什么來的,用一個具體的series類來創建就可以了,比如用TLineSeries、 TPieSeries、 TPointSeries、 TPointSeries等等都行
1.3.6            TTeeFunction Component可以實現在同一個TChart里面,一個Serries對另一個Serries的統計

1.4      [問題極其使用技巧]

    1.4.1            TChart中如何實現只有Y軸的放大與縮小功能?
設置BottomAxis或者LeftAxis的Automatic:=false並同時設置Minimum,Maximum屬性
    1.4.2            如何固定TChart中的坐標,不使TChart中的坐標跟隨Series的變化而變化?
//設置底座標
with myChart.BottomAxis do
begin
    Automatic:=false;
    Minimum:=0;
    LabelStyle := talText;
end;
//設置左坐標
with myChart.LeftAxis do
begin
    Automatic:=false;
    Minimum:=0;
    Title.Angle:=270;
    Title.Font:=Self.Font;
    Title.Font.Charset:=ANSI_CHARSET;
    Title.Font.Name:='@宋體';
    Grid.Visible := False;
end;
//設置右坐標
with myChart.RightAxis do
begin
    Automatic:=false;
    Title.Font:=Self.Font;
    Title.Font.Charset:=ANSI_CHARSET;
    Title.Font.Name:='@宋體';
    Title.Caption:='累計百分比(%)';
    Maximum:=100;
    Minimum:=0;
end;
    1.4.3            如何刪除一個圖形中的一個點?
使用Series的delete 方法
    1.4.4            如何修改一個點的X或者Y 值?
LineSeries1.YValue[3] := 27.1 ;
{In Bubble Series}
BubbleSeries1.RadiusValues.Value[ 8 ] := 8.1 ;
{In Pie Series}
PieSeries1.PieValues.Value[ 3 ] := 111 ;
    1.4.5            如果橫坐標是時間(日期),如何進行設置?
{First, you need to set the DateTime property to True in the desired X and/or Y values list.}
LineSeries1.XValues.DateTime := True ;
{Second, use the same above described methods, but give the values as Date, Time or DateTime values}
LineSeries1.AddXY( EncodeDate( 1996 , 1 , 23 ) , 25.4 , 'Barcelona' , clGreen );
    1.4.6            如何在chart中畫出的曲線某個點上標記出該點的值?
Series.Marks.Visible:=true;
Series.Marks.Style:=smsValue;
    1.4.7            如何設置橫軸或者縱軸的增長率?
Chart.BottomAxis.Increment := DataTimeStep[ dtOneHour ] ;
Chart.RightAxis.Increment := 1000;
    1.4.8            如何對圖象進行縮放?
TChart的ZoomRect或者ZoomPercent方法(Pie圖可能不支持縮放)
1.5      [TChart可以繪制的圖形]
    1.5.1            Line ( TLineSeries)
    1.5.2            FastLine (TFastLineSeries) 相對Line來說,它損耗了某些屬性從而來實現快速繪制
    1.5.3            Bar (TBarSeries)
    1.5.4            Horizontal bar (THorizBarSeries)
    1.5.5            Area (TAreaSeries)
    1.5.6            Point (TPointSeries)
    1.5.7            Pie (TPieSeries)
    1.5.8            Arrow (TArrowSeries)
    1.5.9            Bubble (TBubbleSeries)
    1.5.10         Gantt (TGanttSeries)
    1.5.11         Sharp (TChartShape)

1.6      [TChart的實時繪制]
實時繪制對機器性能要求比較高,因此我們在編程的時候要注意下面幾個方面:
ü         使用2D圖形
ü         是Chart盡可能包含少的點
ü         如果需要,可以移除(remove)chart的legend(?????)和Title
ü         使用默認的字體和字體大小
ü         使用FastLineSeries
ü         使用實體(solid)畫筆和畫刷格式
ü         盡量避免使用圓形和環行bar樣式
ü         不要使用背景圖片和漸變效果樣式
ü         把Chart的BevelInner和BevelOUter屬性設置為bcNone
ü         如果需要,把TChart的AxisVisible屬性設置為False
ü         把BufferedDisplay設置為false可以加速chart的重繪

1.7      [Scrolling]
   TChart有4中scroll選擇(AllowPanning屬性),分別是 不允許Scroll ( pmNone) ; 水平Scroll (pmHorizontal) ; 垂直Scroll (pmVertical) ; 水平和垂直Scroll (pmBoth)
Procedure Scroll(Const Offset:Double; CheckLimits:Boolean);
例子如下:
Chart1.BottomAxis.Scroll( 1000, True );這段代碼也等同於
With Chart1.BottomAxis do
Begin
Automatic:=false;
SetMinMax( Minimum+1000, Maximum+1000 );
    End;
1.8      [TChart中的全局變量]
ü         TeeScrollMouseButton := mbRight;設置鼠標右鍵為TChart滾動鍵(默認)
ü         TeeScrollKeyShift    := [ ssCtrl ]; 要按住Control鍵才可以使Scroll滾動

1.9      [TChartSerries使用技巧]
    1.9.1            運行時候創建一個Serries, 三種方法:
        1.Var MySeries : TBarSeries ;
MySeries := TBarSeries.Create( Self );
MySeries.ParentChart := Chart1 ;
        2.Chart1.AddSeries( TBarSeries.Create( Self ) );
        3.Var MyClass : TChartSeriesClass;
MyClass := TBarSeries ;
Chart1.AddSeries( MyClass.Create( Self ) );
    1.9.2            獲得TChart中的Serries數組,也有三種方法
        1.MySeries := Chart1.SeriesList [ 0 ]
        2.MySeries := Chart1.Series [ 0 ]
        3.MySeries := Chart1 [ 0 ]
    1.9.3            SerriesCount屬性獲得SeriesList中Series的個數
    1.9.4            隱藏TChart中的Series有三種方法,但是效果不等價
        1. Series1.Active:=False; 僅僅隱藏,當設置為true的時候還可以顯示出來
        2. Series1.ParentChart:=nil ; 隱藏,重新設置ParentChart為TChart時候可以顯示
        3. Series1.Free; 刪除了Series. 不可以恢復
    1.9.5            TChart中的數據排序
    With Series1 do
begin
    YValues.Order:=loAscending;
    YValues.Sort;
    Repaint;
end;
Ø         定位一個點(Loacate a point)
Series1.XValues.Locate(123);
Ø         XValue和YValue都擁有的屬性Total , TotalABS , MaxValue , MinValue


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM