http://www.cnblogs.com/ywangzi/archive/2012/10/23/2734856.html
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
--线条
lnsrsSeries1->Clear();
lnsrsSeries1->GetVertAxis->Title->Caption = "标准分";
lnsrsSeries1->GetHorizAxis->Title->Caption = "维度";
String str1[] = {"c","b","a"};
String str2[] = {"A","B","C","E","F","G","H","I","L","M","N","O","Q1","Q2","Q3","Q4","SD"};
for(int i=0;i<17;i++)
{
lnsrsSeries1->Add(a[i],str2[i],(TColor)RGB(85,85,255));
}
lnsrsSeries1->Active = true;
bar
Series1->AddBar(Total,QrReport->FieldByName("科室")->AsString,GetDefaultColor(t));