Teechart图表应用技术详解—第三章之图表轴的维护
Steema公司和慧都科技针对中国市场联合推出中文版TeeChart for .NET图表控件,一共汉化2000个词条(17000个单词),汉化文档35000个单词,包括控件设计时与运行时的界面汉化以及控件使用向导文档的汉化,总汉化90%以上!
TeeChart for .NET中文版让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。TeeChart for .NET中文版具有易上手,使用方便,稳定性好,性价比高,价格优惠等优势,并且针对Web应用提供无限制服务器分发授权方式,非常有利于产品集成。
轴的刻度设置
Chart组件有左、右、上、下和深度5个标准轴( LeftAxis、RightAxis、TopAxis、BottomAxis和DepthAxis),每个轴都是TChartAxis组件类的一个实例,而且用户可以自行增加任意个坐标轴。每个轴负责数值与像素之间关系的计算,以及轴、点的插入和删除等,各自按默认的最大和最小值进行计算。
当需要设定按用户指定的值进行图表绘制时,可以按下列代码关闭自动计算属性:
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);
时间轴与对数轴
当与序列组件关联的轴包含有时间刻度时,即XValues.DateTime或YValues.DateTime属性为真时,改变时间轴的刻度与改变非时间轴刻度的方法是一样的:
With Chart1.LeftAxis do begin Automatic:=False; Minimum:=EncodeDate(1990, 3, 16); Maximum := Encode Date(2000, 5, 24 ); end;
如果一个轴的最大值和最小值大于或等于零,可以将这个轴设置为对数轴。线性轴和对数轴的刻度设置是不同的。
注意:当按对数增量方式显示轴标签时要借助OnGetNextAxisLabel和OnGetAxisLabel事件产生一个用户轴标签。
轴的反转
一个坐标轴可以进行反转即Minimum和Maximum进行交换,可设定 Inverted:=True;使用轴反转功能时往往会造成误解,毕竟这种方法不太常用,所以在使用过程中需要特别注意。
轴的风格与增量
坐标轴可以通过多种方式显示,如刻度线、栅格、标签的有无,可以定制所有的格式属性如颜色、字体、风格等。轴的增量属性( Increment)控制栅格线的数暈和轴与标签间的距离。默认状态增量为0,这意味着轴将自动计算标签间的距离。如果不希望以自动方式显示标签,可以设置 LabelsSeparation为0:
Chart1.LeftAxis.LabelsSeparation:=0;
下面的代码设置垂直轴的增量为30:
Series1.Clear; Series1. AddArray([ 20, 50, 120 ]); Chart1.LeftAxis.Increment:= 30;
默认状态下,第一个轴标签从离增量最近的地方开始。设置 RoundFirstLabel为False使标签可以从最大值开始:
Chart1.LeftAxis.RoundFirstLabel:=False;
时间轴增量
可以使用包含定义轴增量的预定义数组 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中定义标签出现的位置。下面这个例子是在垂直轴正值处显示标签,从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方法可以在屏幕的指定位置显示一个与当前存在的轴刻度相同的新轴。下面的例子是用随机数生成一个线性序列,然后创建两个附加的轴。有三个可指定参数: PosLabels、PosTitle和PosAxis分别放置标签、标题和轴的位置,参数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;
自定义轴
使用图表編辑器实现
自定义轴可以在设计阶段使用图表编辑器实现,步骤如下:
-
在图表编辑器的轴(Axis)页面使用+按钮增加一个轴。
-
在位置( Position)页面设置轴的有关属性。
-
配置自定义轴的属性和配置标准轴属性的方法是一致,它允许移动或重新定义轴的维数。
-
在序列的通用( General)页面建立轴与序列的关联。
使用代码实现
下面的代码增加垂直和水乎两个轴并与序列关联。
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列表实现。
下一节我们将会介绍第三章图表与序列的操作维护:序列的维护(上)。如果有对Teechart图表感兴趣的朋友,可以多多关注本教程,并且欢迎在评论区留言。
相关资料推荐:
上一章:Teechart组件的应用实例:Web数据源组件ChartWebSource
现TeeChart for .NET,TeeChart for JavaScript/HTML5,TeeChart for Xamarin.Android等均已加入在线订购,现在抢购可立享优惠!
关注慧聚IT微信公众号???,了解产品的最新动态及最新资讯。