Javen的文档


TChart的属性和用法

<p>Lazarus 中的 TChart 组件(来自 TAChart 包)是一个功能强大的图表绘制组件。以下是其主要的属性和用法详解:</p> <h2>一、基本属性</h2> <h3>1. 常用属性</h3> <pre><code class="language-pascal">// 基本外观 Chart1.Title.Text.Text := &amp;#039;图表标题&amp;#039;; // 图表标题 Chart1.Title.Visible := True; //显示标题 Chart1.Foot.Text.Text := &amp;#039;图表脚注&amp;#039;; // 脚注 Chart1.BackColor := clWhite; // 背景色 Chart1.Gradient.Visible := False; // 渐变背景 // 图区边框 Chart1.Frame.Visible := True; // 显示边框 Chart1.Frame.Color := clBlack; // 边框颜色 Chart1.Frame.Width := 1; // 边框宽度</code></pre> <h3>2. 坐标轴属性</h3> <pre><code class="language-pascal">// X轴 (BottomAxis) Chart1.BottomAxis.Title.Caption := &amp;#039;X轴&amp;#039;; // 轴标题 Chart1.BottomAxis.Title.Visible := True; Chart1.BottomAxis.Grid.Visible := True; // 网格线 Chart1.BottomAxis.Marks.Visible := True; // 刻度标签 Chart1.BottomAxis.Range.Max := 50; //和下面属性一样效果,差异是什么? Chart1.BottomAxis.Range.UseMax :=True; Chart1.Extent.UseXMax := True; //启用X轴最大值 Chart1.Extent.Xmax :=50; //X轴最大值 // Y轴 (LeftAxis) Chart1.LeftAxis.Title.Caption := &amp;#039;Y轴&amp;#039;; Chart1.LeftAxis.Grid.Visible := True; // 设置范围?? Chart1.BottomAxis.Automatic := False; Chart1.BottomAxis.Minimum := 0; Chart1.BottomAxis.Maximum := 100;</code></pre> <h2>二、图表序列(Series)</h2> <h3>1. 常用序列类型</h3> <pre><code class="language-pascal">var LineSeries: TLineSeries; BarSeries: TBarSeries; PieSeries: TPieSeries; AreaSeries: TAreaSeries; begin // 线图 LineSeries := TLineSeries.Create(Chart1); Chart1.AddSeries(LineSeries); // 柱状图 BarSeries := TBarSeries.Create(Chart1); Chart1.AddSeries(BarSeries); // 饼图 PieSeries := TPieSeries.Create(Chart1); Chart1.AddSeries(PieSeries); // 面积图 AreaSeries := TAreaSeries.Create(Chart1); Chart1.AddSeries(AreaSeries); end;</code></pre> <h3>2. 添加数据</h3> <pre><code class="language-pascal">// 基本添加数据 LineSeries.AddXY(1, 10); LineSeries.AddXY(2, 25); LineSeries.AddXY(3, 15); LineSeries.AddXY(4, 30); // 添加带标签的数据 LineSeries.AddXY(5, 20, &amp;#039;点5&amp;#039;); // 批量添加数据 var i: Integer; begin for i := 1 to 10 do LineSeries.AddXY(i, Random(100)); end;</code></pre> <h2>三、完整示例</h2> <h3>1. 创建线图</h3> <pre><code class="language-pascal">procedure TForm1.CreateLineChart; var LineSeries: TLineSeries; i: Integer; begin // 清除现有序列 Chart1.ClearSeries; // 创建线序列 LineSeries := TLineSeries.Create(Chart1); Chart1.AddSeries(LineSeries); // 设置序列属性 LineSeries.Title := &amp;#039;数据线&amp;#039;; LineSeries.SeriesColor := clBlue; LineSeries.LinePen.Width := 2; LineSeries.ShowPoints := True; LineSeries.Pointer.Brush.Color := clRed; LineSeries.Pointer.Style := psCircle; // 添加数据 for i := 1 to 20 do LineSeries.AddXY(i, Sin(i * 0.5) * 50 + 50); // 设置图表属性 Chart1.Title.Text.Text := &amp;#039;正弦波形图&amp;#039;; Chart1.BottomAxis.Title.Caption := &amp;#039;时间&amp;#039;; Chart1.LeftAxis.Title.Caption := &amp;#039;幅度&amp;#039;; // 设置范围 Chart1.BottomAxis.Automatic := False; Chart1.BottomAxis.Minimum := 1; Chart1.BottomAxis.Maximum := 20; end;</code></pre> <h3>2. 创建柱状图</h3> <pre><code class="language-pascal">procedure TForm1.CreateBarChart; var BarSeries: TBarSeries; begin Chart1.ClearSeries; BarSeries := TBarSeries.Create(Chart1); Chart1.AddSeries(BarSeries); BarSeries.AddXY(1, 45, &amp;#039;一月&amp;#039;); BarSeries.AddXY(2, 68, &amp;#039;二月&amp;#039;); BarSeries.AddXY(3, 32, &amp;#039;三月&amp;#039;); BarSeries.AddXY(4, 89, &amp;#039;四月&amp;#039;); BarSeries.AddXY(5, 56, &amp;#039;五月&amp;#039;); BarSeries.BarBrush.Color := clSkyBlue; BarSeries.BarPen.Color := clNavy; BarSeries.BarWidthPercent := 50; Chart1.Title.Text.Text := &amp;#039;月度销售数据&amp;#039;; end;</code></pre> <h2>四、高级功能</h2> <h3>1. 多序列图表</h3> <pre><code class="language-pascal">procedure TForm1.CreateMultiSeriesChart; var Series1, Series2: TLineSeries; i: Integer; begin Chart1.ClearSeries; // 第一个序列 Series1 := TLineSeries.Create(Chart1); Chart1.AddSeries(Series1); Series1.Title := &amp;#039;实际值&amp;#039;; Series1.SeriesColor := clBlue; // 第二个序列 Series2 := TLineSeries.Create(Chart1); Chart1.AddSeries(Series2); Series2.Title := &amp;#039;预测值&amp;#039;; Series2.SeriesColor := clRed; Series2.LineType := ltNone; Series2.ShowPoints := True; Series2.Pointer.Style := psDiamond; // 添加数据 for i := 1 to 10 do begin Series1.AddXY(i, Random(50) + 25); Series2.AddXY(i, Random(50) + 30); end; // 显示图例 Chart1.Legend.Visible := True; end;</code></pre> <h3>2. 实时数据更新</h3> <pre><code class="language-pascal">procedure TForm1.Timer1Timer(Sender: TObject); var x, y: Double; begin if Chart1.SeriesCount &amp;gt; 0 then begin // 获取最后一个点的X值 with Chart1.Series[0] as TLineSeries do begin if Count &amp;gt; 0 then x := GetXValue(Count-1) + 1 else x := 1; y := Random(100); AddXY(x, y); // 保持显示最近20个点 if Count &amp;gt; 20 then Delete(0); end; end; end;</code></pre> <h3>3. 图表交互</h3> <pre><code class="language-pascal">procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xValue, yValue: Double; begin // 将像素坐标转换为图表坐标 xValue := Chart1.BottomAxis.ImageToGraph(X); yValue := Chart1.LeftAxis.ImageToGraph(Y); StatusBar1.SimpleText := Format(&amp;#039;X: %.2f, Y: %.2f&amp;#039;, [xValue, yValue]); end;</code></pre> <h2>五、图例和标签</h2> <pre><code class="language-pascal">// 图例设置 Chart1.Legend.Visible := True; Chart1.Legend.Alignment := laBottomRight; // 位置 Chart1.Legend.Frame.Visible := True; // 边框 // 数据点标签 LineSeries.Marks.Visible := True; LineSeries.Marks.Style := smsLabel; // 显示标签 LineSeries.Marks.Format := &amp;#039;%.1f&amp;#039;; // 格式</code></pre> <h2>六、保存和导出</h2> <pre><code class="language-pascal">// 保存为图片 procedure TForm1.SaveChartAsImage; begin Chart1.SaveToFile(TPortableNetworkGraphic, &amp;#039;chart.png&amp;#039;); // 或 Chart1.SaveToFile(TPortableNetworkGraphic, &amp;#039;chart.bmp&amp;#039;); // 或 Chart1.SaveToFile(TPortableNetworkGraphic, &amp;#039;chart.jpg&amp;#039;); end;</code></pre> <h2>七、常用事件</h2> <pre><code class="language-pascal">// 点击数据点 procedure TForm1.Chart1ClickSeries(Sender: TCustomChart; Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; const X, Y: Integer); begin ShowMessage(Format(&amp;#039;点击了序列 %s 的第 %d 个点&amp;#039;, [Series.Title, ValueIndex])); end; // 鼠标移动 procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin // 实时显示坐标 end;</code></pre> <p>这些是 TChart 的主要属性和用法。TChart 功能非常丰富,可以根据具体需求进行更深入的定制和扩展。</p>

页面列表

ITEM_HTML