TeeChart For VCL/FMX V2017使用教程:第四章 座標軸控制

        TeeChart Pro將自動爲你定義全部的軸標籤,並提供足夠的靈活性,以滿足你的任何特定需求。TeeChart Pro提供了真正的多重座標軸。這些都是在設計或運行時提供的,爲軸定義提供了無數的可能性和靈活性。有關更多信息,請參閱本教程部分。

目錄

4.1 軸控制 – 關鍵區域

(1). Scales(刻度)

(2). Increment(增量)

(3). Titles(標題)

(4). Labels(標籤)

(5). Ticks(標記)

(6). Axis Position(軸位置)

4.2 附加座標軸

(1). 複製軸

(2). 多個定製軸

 

4.3 軸事件

(1). OnClickAxis

(2). OnGetAxisLabel

(3). OnGetNextAxisLabel


        軸頁面共有8個子頁面:Scales(刻度)、Title(標題)、Labels(標籤)、Axis(軸)、Ticks(標記)、Grid(網格)、Position(位置)、Items(條目)

4.1 軸控制-關鍵區域

4.1.1 Scales(刻度)

        當您將序列數據添加到圖表時,軸刻度會自動設置。您可以通過使用Axis屬性更改設計時或運行時的默認值。


        Automatic自動)選擇最佳的軸刻度範圍以適應您的數據。如果你關閉Automatic自動)選項,將激活Options選項),且可以改變座標軸的值。重要的是,記住要從頁面左邊的Axis(軸)菜單中選擇您希望配置的Axis(軸)。

        在圖表中添加一個Line Series線序列),添加一個命令按鈕,代碼如下:

procedure TForm1.BitBtn1Click(Sender: TObject);
var t: Integer;
begin
 For t := 0 To 40 do
   With Series1 do
   begin
Add(Int(Random(t)), '', clRed);
   end;
end;

        在按鈕中運行代碼將繪製一個帶有40個隨機值的Line Series(行序列)

        在設計時進入圖表編輯器。將Axis()頁面底部的 Scales(刻度)頁面區域的Automatic選項關閉。您現在可以爲Axis刻度配置Maximum最大值)和Minimum最小值)。運行代碼將顯示根據您的軸配置值而再次計算的值。使用鼠標右鍵,您可以滾動查看剩餘的值。

1  Minimum(最小數)

        根據代碼設置軸刻度

        您可以使用以下代碼在運行時更改最大和最小值::

       
With Chart1.Axes.Bottom do
begin
Automatic := False;
  Maximum := 36;
  Minimum ;= 5; 

end;

 (2) Maximum(最大數)

        您可以將軸的最大值和最小值分別設置爲自動。例如:
With Chart1.Axes.Bottom do
begin
AutomaticMaximum := True;
Minimum := 5;
end;

4.1.2 Increment(增量) 

        你可以調整軸的間距。從Axis(軸)頁面的Scales(刻度)部分的Increment(增量)子頁面選擇所需的Desired Incre:(期望增量)框,並添加所需的增量。也可以您可以在運行時通過代碼更改這項:

        Chart1.Axes.Bottom.Increment := 20;

Datetime data(日期數據)

        如果您的數據是datetime(日期型)【您可以爲你的Series(序列)數據設置爲的datetime(日期型),通過進入Series序列)、General(一般)頁面】,圖表、Axis(軸)頁面和Scales(刻度)部分將顯示一個datetime(日期)範圍。從展示的Desired Incre:(期望增量)框中選擇範圍。

添加一些示例數據

for t := 1 To 25 do
    Series1.AddXY(EncodeDate(1998, 4, t), Random(t), '', clRed);

        在運行時更改增量:

 Chart1.Axes.Bottom.Increment := DateTimeStep[dtOneWeek];

        參看Axis.ExactDateTime屬性,可以獲得更多關於時間軸標籤的信息。

4.1.3 Title(標題)

        Title有兩個子頁面:Style(樣式)、Format(格式)

        標題在(軸)Axis頁面的Title標題)部分中設置。您可以更改Axis(軸)的標題文本及其字體。這個角度可以從090180270度的值中選擇。對於運行時,可以看到TChartAxisTitle組件。

4.1.4 Labels(標籤)

        標籤頁面5個子頁面:Style(樣式)、Options(選項)、Format(格式)、Margins(邊距)、Back(背景)

注意

        當頻繁改變軸的標籤時,請記住,TeeChart根據LabelsSeparation屬性的設置來避免標籤重疊。這意味着,如果標籤改變的頻率太高,標籤就無法匹配,那麼TeeChart就會配置最佳匹配。改變標籤Angle角度)和標籤Separation間隔)是兩個選項,可以幫助你適應你需要的標籤。請參閱Labels(標籤)部分和LabelsAngle屬性。

1 Label formats(標籤格式)

        您可以將所有標準數字和日期格式應用於Axis(軸)標籤。Axis(軸)頁面,Labels標籤)部分包含字段Values format值格式)。如果您的數據是datetime(時間型),那麼字段名將更改爲日期時間格式。在編輯器中拖拽幫助“?“圖標放到字段上,以獲得完整的選項列表。在運行時使用:

Chart1.Axes.Bottom.AxisValuesFormat := '#,##0.00;(#,##0.00)';
//或者是Datetime數據
Chart1.Axes.Bottom.DateTimeFormat := 'dd/mmm/yy hh:mm:ss';

2 MultiLine labels(多行標籤)

        Axis(軸)標籤可以顯示爲多行文本,而不只是一行文本。使用TeeLineSeparator全局常量分隔行,缺省情況下是回車ASCII字符(#13)

示例

//以這種方式添加序列標籤,並使用“Marks”作爲軸標籤樣式
Series1.Add( 1234, 'New'+TeeLineSeparator+'cars' , clRed );
Series1.Add( 2000, 'Old'+TeeLineSeparator+'bicycles' , clBlue );

        DateTime(時間型)標籤的示例:

        下面的內容將以兩行文字顯示底部軸的標籤,一行顯示月和日,另一行顯示年份:

        Feb-28 Mar-1 .. 1998 1998 ..

Series1.AddXY( EncodeDate( 1998,2,28 ), 100 );
Series1.AddXY( EncodeDate( 1998,3,1 ), 200 );
Series1.AddXY( EncodeDate( 1998,3,2 ), 150 );
Series1.XValues.DateTime := True;
Chart1.Axes.Bottom.DateTimeFormat := 'mm/dd hh:mm';   { <-- space }

        如果您將LabelsMultiLine屬性設置爲True,那麼axis(軸)自動的將標籤的空格處分割爲單獨的行。

        Chart1.Axes.Bottom.LabelsMultiLine:=True;

        把標籤分成兩份:

        'mm/dd'爲第一行

        'hh:mm'爲第二行

        在運行時,您可以使用OnGetAxisLabel事件以編程方式將標籤分成行:

procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
var s:string;
begin
    s:='abc'+TeeLineSeparator+'def';
    LabelText:=ReplaceChar(s,' ',TeeLineSeparator);
end;

        軸LabelsAngle的屬性(標籤旋轉度爲090180270),也可用於多行軸標籤。

3 Customising Axis labels(定製軸標籤)

        使用Axis events(軸事件)可以獲得進一步的標籤控制。事件允許你激活/禁用/改變任何個別的軸標籤。下面的例子修改了每個標籤,在點索引值前面放置一個文本短語。

//設置LabelStyle爲 'Mark',使用Tchart編輯器或使用:-
Chart1.Axes.Bottom.LabelsStyle := talMark;
//OnGetaxisLabel事件
procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
 if Sender = Chart1.Axes.Bottom then
    LabelText := 'Period ' + IntToStr(ValueIndex);
end;

        請參閱定名爲Axisevents(軸事件)的部分,以獲得關於使用軸事件進行定製標籤的更多信息。

4.1.5 Ticks(標記)

        標記頁面有三個子頁面:Outer(外部的)、Inner(內部的)、Minor(次要的)


        有3種標記類型。你可以改變每一種標記類型的長度、寬度和顏色。如果標記寬度設置爲1(默認),那麼您可以將樣式更改爲若干行類型中的一種(dot點)、dash破折號)等)。如果寬度大於1,樣式將被忽略。

       
With Chart1.Axes.Bottom do
Begin
TickLength := 7;
Ticks.Color := clGreen;
MinorTickCount := 10; //改變(主要)標記之間次要標記的數量
end;

4.1.6 Axis position(軸位置) 

        軸有一個屬性,它可以修改每個軸所在的位置。在這個例子中,軸被移動到總圖表寬度的50%,所以它顯示在圖表中心:

Chart1.Axes.Left.PositionPercent := 50 ;

4.2  附加座標軸

4.2.1 複製軸

        TeeChart提供了5個與數據序列相關的軸:左、頂、底、右和深。當您將一個新序列添加到一個圖表時,您可以定義該序列的哪些軸是相關的【請轉到Series(序列)選項卡,General(一般)頁面】。您可以使用軸的Customdraw方法,在圖表上的任何位置重複4個前面的軸中的任何一個(或全部)。注意,這個方法會複製您的軸,它不會添加一個新的定製軸。有關更多信息,請參閱下一節,Multiple Custom Axes多個定製軸)。

        您將找到這個名爲“CustAxisProject1”的示例,有TeeChart示例代碼:

//用隨機數據填充本例的序列
procedure TForm1.BitBtn1Click(Sender: TObject);
Var t:integer;
begin
  For t := 0 To 20 do
    Series1.AddXY(t, Random(100) - Random(70), '', clRed);
end;
 
//將此代碼放入Ondrawdraw Values()事件:
procedure TForm1.Series1BeforeDrawValues(Sender: TObject);
var posaxis :Integer;
begin
  With Chart1 do
  begin
    If Axes.Left.Maximum > 0 Then
    begin
      
      //當滾動或縮放時,始終保持在圖表矩形中所包含的網格線。      Canvas.ClipRectangle(ChartRect);
 
      //總是在圖表的中間畫出第2個縱軸
      posaxis := (ChartRect.Left) + (ChartRect.Right - ChartRect.Left) div 2;
      Axes.Left.CustomDraw(posaxis - 10, posaxis - 20, posaxis, True);
      //在垂直軸的10上畫出第2個水平軸
      posaxis := (Axes.Left.CalcYPosValue(10));
      Axes.Bottom.CustomDraw(posaxis + 10, posaxis + 40, posaxis, True);
      Canvas.UnClipRectangle;
    end;
  end;
end;

Custom axes(定製軸

4.2.2 多個定製軸

        PositionPercent位置百分比)和Stretching(拉伸)屬性一起使用,在圖表上任意位置都可以有無限的座標軸。滾動、縮放和軸觸碰檢測也適用於定製創建的軸。在設計時通過圖表編輯器,和在運行時通過幾行代碼,創建額外的軸是可能的:

通過圖標編輯器

        TeeChart提供了在設計時創建自定義軸的能力,使它們能夠保存在TeeCharttee文件格式中。要實現這一點,打開Chart Editor圖表編輯器)並單擊Axis(軸)選項卡,然後選擇“+”按鈕來添加自定義軸。然後選擇Position位置)選項卡,確保您的新定製軸被突出顯示。這個頁面上的水平復選框允許您將新的定製軸定義爲水平軸,或者將其作爲默認的垂直軸。這個頁面的其餘部分和Axis頁面中的其他選項卡可以用來改變這些定製軸的Scales(刻度)Increment(增量)Titles標題)、Labels標籤)、Ticks標記、MinorTicks(副標記)和Position(位置)。

        爲了把這新的自定義軸和你想要的Data Series數據序列)關聯起來,選擇Series系列)選項卡及其General(常規)頁面,下拉組合框Horizontal Axis水平軸)和Vertical Axis垂直軸)的將使您能夠選擇新的自定義軸,取決於你之前定義的垂直還是水平的。

通過代碼   

        示例:

procedure TForm1.BitBtn2Click(Sender: TObject);
Var MyAxis : TChartAxis ;
begin
  MyAxis := TChartAxis.Create(  Chart1 );
  Series2.CustomVertAxis := MyAxis;
  //您可以修改新創建的軸的任何屬性,例如axis顏色或axis標題
  With MyAxis do
  begin
    Axis.Color:=clGreen ;
    Title.Caption := 'Extra axis' ;
    Title.Font.Style:=[fsBold];
    Title.Angle := 90;
    PositionPercent := 20; //percentage of Chart rectangle
  end;
end;
         通過使用StartPositionEndPosition屬性,您可以將新軸放在被關聯的圖表的任何位置。
            StartPosition:=50;          
                           EndPosition:=100;
        這些數字表示爲圖表矩形框的百分比,0(zero)(在垂直軸的情況下)是頂部。這些屬性可以應用到Standard Axes(標準軸)上,從而在圖表中創建完全分割的“SubCharts(子圖表)”  

        示例

     
With Chart1.Axes.Left do
  begin
    StartPosition:=0;
    EndPosition:=50;
    Title.Caption:='1st Left Axis';
    Title.Font.Style:=[fsBold];
  end;
 

        以上兩個代碼示例結合以下數據:.

var t: integer;
begin
  for t := 0 to 10 do
  begin
    Series1.AddXY(t,10+t,'',clTeeColor);
    if t > 1 then
      Series2.AddXY(t,t/2,'',clTeeColor);
  end;

...將顯示如下圖表:

多重軸

        添加自定義軸的另一種技術是通過使用List Add列表添加),用Axis List軸列表)作爲焦點,然後通過Index索引)來訪問Axis(軸),如下列代碼

//添加數據到序列:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.FillSampleValues(10);
  Series2.FillSampleValues(10);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 tmpVertAxis: TChartAxis;
 tmpHorizAxis: TChartAxis;
begin
  {Add vertical Axis}
  Chart1.CustomAxes.Add;
  tmpVertAxis:=Chart1.CustomAxes[0];
  tmpVertAxis.PositionPercent:=50;
  Series1.CustomVertAxis:=tmpVertAxis;
  {Add horizontal Axis}
  Chart1.CustomAxes.Add;
  tmpHorizAxis:=Chart1.CustomAxes[1];
  tmpHorizAxis.Horizontal:=True;
  tmpHorizAxis.Axis.Color:=clGreen;
  tmpHorizAxis.PositionPercent:=50;
  Series1.CustomHorizAxis:=tmpHorizAxis;
end;

        選擇是無限的!當使用Custom Axes自定義軸)時,我們建議小心謹慎,因爲開始用新的軸填充屏幕很容易,並且會丟失您想要管理的哪一個!


4.3  軸事件

Axis事件爲修改Axis Labels(軸標籤)提供了運行時靈活性,並在Axis上單擊時,向用戶提供交互。

4.3.1 onClickAxis

procedure TForm1.Chart1ClickAxis(Sender: TCustomChart; Axis: TChartAxis;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  //當點擊底部軸時,顯示被點擊軸的被點擊點。
  if Axis = Chart1.Axes.Bottom Then
     ShowMessage('Clicked Bottom Axis at ' + FloatToStr(Chart1.Axes.Bottom.CalcPosPoint(X)));
end;

參看OnClickAxis事件示例

4.3.2 onGetAxisLabel 

        可用於修改Axis標籤。參看OnGetAxisLabel事件。

 示例

procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  if Sender = Chart1.Axes.Bottom Then
     Case StrToInt(FormatDateTime('mm', StrToDate(LabelText))) of
       1,2,3 : LabelText := '1st Qtr';
       4,5,6 : LabelText := '2nd Qtr';
     end;
end;

4.3.3 onGetNextAxisLabel   

        可以用來決定應該顯示哪些Axis標籤。參看OnGetNextAxisLabel事件。您應該使用Stop Boolean屬性來包含/排除Axis標籤。

示例

procedure TForm1.Chart1GetNextAxisLabel(Sender: TChartAxis;
  LabelIndex: Integer; var LabelValue: Double; var Stop: Boolean);
begin
  Stop:=False;
  if Sender = Chart1.Axes.Bottom Then
  begin
    if LabelValue>=5 then LabelValue:=LabelValue+5
                     else LabelValue:=5;
  end
  else
    Stop:=True;
end;

        上面的例子將在底部軸“5”上開始加標籤,每5點加一個。其他軸的標籤不受影響。


                                                                第四章完


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