Teechart圖表應用技術詳解—第三章之圖表軸的維護
Steema公司和慧都科技針對中國市場聯(lián)合推出中文版TeeChart for .NET圖表控件,一共漢化2000個詞條(17000個單詞),漢化文檔35000個單詞,包括控件設計時與運行時的界面漢化以及控件使用向導文檔的漢化,總漢化90%以上!
TeeChart for .NET中文版讓您在使用和學習上沒有任何語言障礙,至少可以節(jié)省30%的開發(fā)時間。TeeChart for .NET中文版具有易上手,使用方便,穩(wěn)定性好,性價比高,價格優(yōu)惠等優(yōu)勢,并且針對Web應用提供無限制服務器分發(fā)授權方式,非常有利于產(chǎn)品集成。
軸的刻度設置
Chart組件有左、右、上、下和深度5個標準軸( LeftAxis、RightAxis、TopAxis、BottomAxis和DepthAxis),每個軸都是TChartAxis組件類的一個實例,而且用戶可以自行增加任意個坐標軸。每個軸負責數(shù)值與像素之間關系的計算,以及軸、點的插入和刪除等,各自按默認的最大和最小值進行計算。
當需要設定按用戶指定的值進行圖表繪制時,可以按下列代碼關閉自動計算屬性:
Chart1.LeftAxis.Automatic:=False;
也可以采用下列代碼對最小、最大值按自動、非自動(設定值)方式計算:
Chart1.LeftAxis.AutomaticMaximum:=False; Chart1.LeftAxis.AutomaticMinimum:=True;
也可以通過Minimum和Maximum屬性改變坐標軸的設定:
with Chart1. LeftAxis do begin Automatic:=False; Minimum:=0; Maximum:= 10000; end;
或者使用軸對象的方法SetMinMax進行設置:
Chart1.LeftAxis.SetMinMax(0,10000);
時間軸與對數(shù)軸
當與序列組件關聯(lián)的軸包含有時間刻度時,即XValues.DateTime或YValues.DateTime屬性為真時,改變時間軸的刻度與改變非時間軸刻度的方法是一樣的:
With Chart1.LeftAxis do begin Automatic:=False; Minimum:=EncodeDate(1990, 3, 16); Maximum := Encode Date(2000, 5, 24 ); end;
如果一個軸的最大值和最小值大于或等于零,可以將這個軸設置為對數(shù)軸。線性軸和對數(shù)軸的刻度設置是不同的。
注意:當按對數(shù)增量方式顯示軸標簽時要借助OnGetNextAxisLabel和OnGetAxisLabel事件產(chǎn)生一個用戶軸標簽。
軸的反轉
一個坐標軸可以進行反轉即Minimum和Maximum進行交換,可設定 Inverted:=True;使用軸反轉功能時往往會造成誤解,畢竟這種方法不太常用,所以在使用過程中需要特別注意。
軸的風格與增量
坐標軸可以通過多種方式顯示,如刻度線、柵格、標簽的有無,可以定制所有的格式屬性如顏色、字體、風格等。軸的增量屬性( Increment)控制柵格線的數(shù)暈和軸與標簽間的距離。默認狀態(tài)增量為0,這意味著軸將自動計算標簽間的距離。如果不希望以自動方式顯示標簽,可以設置 LabelsSeparation為0:
Chart1.LeftAxis.LabelsSeparation:=0;
下面的代碼設置垂直軸的增量為30:
Series1.Clear; Series1. AddArray([ 20, 50, 120 ]); Chart1.LeftAxis.Increment:= 30;
默認狀態(tài)下,第一個軸標簽從離增量最近的地方開始。設置 RoundFirstLabel為False使標簽可以從最大值開始:
Chart1.LeftAxis.RoundFirstLabel:=False;
時間軸增量
可以使用包含定義軸增量的預定義數(shù)組 DateTimeStep設置時間軸:
Chart1.BottomAxis.Increment:=DateTimeStep[dtOneMonth];
如果想使軸標簽精確到時間的邊界,如某月的第一天,可以按如下設置:
Chart1.BottomAxis.ExactDateTime:=True;
柵格線與軸標簽
軸的柵格線是按每個增量顯示的,或者在每個軸的標簽位置顯示。
TickOnLabelsOnly屬性用于控制這個功能:
Chart1.BottomAxis.TickOnLabelsOnly:=False;
軸的標簽有幾種形式,由LabelStyle屬性控制:
Chart1.BottomAxis.LabelStyle:= talValue;
LabelStyle屬性的可能取值由TAxisLabelStyle類定義:
TAxisLabelStyle=(talAuto, talNone, talValue, talMark, talText);
其中:talValue:顯示軸的刻度。
talMark:顯示序列的點標記。
talText:顯示序列的XLabels。
talNone:不顯示。
talAuto:自動方式顯示。
當LabelStyle是talText時,如果序列沒有XLabels,TeeChart將自動設置到talValue。對于talMark和talText風格,軸標簽將按序列點的位置精確顯示,這時將不再使用軸的增量屬性也可以在OnGetAxisLabel事件中定值標簽文本:
procedure TForm1.Chart1GetAxisLabel (Sender:TChartAxis; Series:TChartSeries: ValueIndex: Integer; var LabelText: String); begin if Sender=Chart1. LeftAxis then if ValueInde<2 then LabelText :=' '; end;
在OnGetNextAxisLabelEvent中定義標簽出現(xiàn)的位置。下面這個例子是在垂直軸正值處顯示標簽,從0開始,增量是250:
procedure TAxisLabelsForm.Chart1GetNextAxisLabel (Sender:TChartAxis; LabelIndex: Integer; var Labelvalue: Double; var Stop: Boolean); begin if Sender=Chart1. LeftAxis then begin if LabelValue>=250 then LabelValue:=LabelValue+250 else LabelValue:=250; end; stop:=False; end;
下面的例子是在左軸上繪制標簽后停止繪制:
procedure TForm1.Chart1GetNextAxisLabel(Sender:TChartAxis; LabelIndex: Integer; var LabelValue: Double; var Stop: Boolean); begin if Sender=Chart1. LeftAxis then begin stop:=False; case LabelIndex of 0: LabelValue:=50; 1: LabelValue: =80; 2: LabelValue:=110; else Stop:=True; end; end;
自定義軸繪制( CustomDraw)
Customdraw方法可以在屏幕的指定位置顯示一個與當前存在的軸刻度相同的新軸。下面的例子是用隨機數(shù)生成一個線性序列,然后創(chuàng)建兩個附加的軸。有三個可指定參數(shù): PosLabels、PosTitle和PosAxis分別放置標簽、標題和軸的位置,參數(shù)GridVisible的true/false可定義是否擴充柵格到新的軸:
procedure TForm1.FormCreate(Sender:TObject); var t:integer; begin Series1.XValues.DateTime:=False; Chart1.BottomAxis.Increment:=0; For t: =-10 to 10 do Series1. addXY(t, Random (100),' ', clTeeColor); end; procedure TForm1.Series1AfterDrawValues(Sender: Tobject); var posaxis, percent: Integer; begin percent:=50; with DBChart1 do begin PosAxis:=ChartRect.Left+Trunc( ChartWidth*Percent/100.0); LeftAxis.CustomDraw(posaxis-10,posaxis-40,posaxis,True); PosAxis:=ChartRect.Top+Trunc( ChartHeight*Percent/100.0); BottomAxis CustomDraw(posaxis+10, posaxis+40, posaxis,True); end;
自定義軸
使用圖表編輯器實現(xiàn)
自定義軸可以在設計階段使用圖表編輯器實現(xiàn),步驟如下:
-
在圖表編輯器的軸(Axis)頁面使用+按鈕增加一個軸。
-
在位置( Position)頁面設置軸的有關屬性。
-
配置自定義軸的屬性和配置標準軸屬性的方法是一致,它允許移動或重新定義軸的維數(shù)。
-
在序列的通用( General)頁面建立軸與序列的關聯(lián)。
使用代碼實現(xiàn)
下面的代碼增加垂直和水乎兩個軸并與序列關聯(lián)。
procedure TForm1.FormCreate(Sender:TObject); begin Series1.FillSampleValues(10); //隨機生成10個點 Series2.FillSampleValues(10); end; procedure TForm1.BitBtn1Click(Sender:Tobject); var tmpVertAxis:TChartAxis; tmpHorizAxis:TChartAxis; tmpVertAxis.PositionPercent:=-50; Series1.CustomVertAxis:=tmpVertAxis; Chart1.CustomAxes.Add; //增加水平軸 tmpHorizAxis:=Chart1.CustomAxes[1]; tmpHorizAxis.Horizonta1:=True; tmpHorizAxis.Axis.Color:=c1Green; tmpHorizAxis.PositionPercent:=50; Series1.CustomHorizAxis:=tmpHorizAxis; end;
當需要訪問自定義軸時可通過 Chart.CustomAxes列表實現(xiàn)。
下一節(jié)我們將會介紹第三章圖表與序列的操作維護:序列的維護(上)。如果有對Teechart圖表感興趣的朋友,可以多多關注本教程,并且歡迎在評論區(qū)留言。
相關資料推薦:
上一章:Teechart組件的應用實例:Web數(shù)據(jù)源組件ChartWebSource
現(xiàn)TeeChart for .NET,TeeChart for JavaScript/HTML5,TeeChart for Xamarin.Android等均已加入在線訂購,現(xiàn)在搶購可立享優(yōu)惠!
關注慧聚IT微信公眾號???,了解產(chǎn)品的最新動態(tài)及最新資訊。