You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11 VCL TChart横轴未使用X参数问题求助

Delphi 11 VCL TChart 横轴X参数未生效、条形位置异常的解决方法

核心问题分析

  • 每次调用AddOneDay都新建3个TBarSeries,7天共生成21个系列,图表横轴会自动按系列索引生成,完全忽略你设置的X参数。
  • StackGroup逻辑错误:你希望同天的三个条形堆叠,但当前将每个系列的StackGroup设为nDay,导致同天的三个系列各自独立(每个系列仅一个数据点,无实际堆叠效果),同时多系列的存在彻底打乱了横轴的X轴配置。

修复步骤

  1. 固定系列,避免重复创建:提前创建3个对应Success、Alerts、Errors的TBarSeries,而非每次循环都新建。
  2. 统一StackGroup实现堆叠:将三个系列的StackGroup设为同一个值(比如0),实现同X值下的条形堆叠。
  3. 定向添加数据:在AddOneDay中直接给已有的三个系列添加数据点。
  4. 自定义横轴标签:手动配置横轴标签为"Day-1"等文本,确保显示符合预期。

修复后的完整代码

procedure TForm1.FormShow(Sender: TObject);
var
  SuccessSeries: TBarSeries;
  AlertsSeries: TBarSeries;
  ErrorsSeries: TBarSeries;

  procedure AddOneDay(nDay,nVal1,nVal2,nVal3:Integer;wTitle:String) ;
  begin
    // 给对应系列添加指定X值的数据点
    SuccessSeries.AddXY((nDay-1)*10, nVal1, wTitle, $00615CFC);
    AlertsSeries.AddXY((nDay-1)*10, nVal2, wTitle, $00ECC2AA);
    ErrorsSeries.AddXY((nDay-1)*10, nVal3, wTitle, $0086F76F);
  end;
begin
  FChart.SeriesList.Clear;

  // 初始化三个固定系列
  SuccessSeries := TBarSeries.Create(FChart);
  AlertsSeries := TBarSeries.Create(FChart);
  ErrorsSeries := TBarSeries.Create(FChart);

  SuccessSeries.ParentChart := FChart;
  AlertsSeries.ParentChart := FChart;
  ErrorsSeries.ParentChart := FChart;

  // 设置系列样式
  SuccessSeries.BarStyle := bsRectGradient;
  AlertsSeries.BarStyle := bsRectGradient;
  ErrorsSeries.BarStyle := bsRectGradient;

  SuccessSeries.Marks.Visible := False;
  AlertsSeries.Marks.Visible := False;
  ErrorsSeries.Marks.Visible := False;

  // 设置图例文本
  SuccessSeries.Legend.Text := 'Success';
  AlertsSeries.Legend.Text := 'Alerts';
  ErrorsSeries.Legend.Text := 'Errors';

  // 统一StackGroup值,实现同X点的条形堆叠
  SuccessSeries.StackGroup := 0;
  AlertsSeries.StackGroup := 0;
  ErrorsSeries.StackGroup := 0;

  SuccessSeries.Transparency := 30;
  AlertsSeries.Transparency := 30;
  ErrorsSeries.Transparency := 30;

  // 配置图表标题
  with FChart.Title do
  begin
    Font.Size := 15;
    Font.Color := clBlack;
    Text.Text := 'Performance Chart';
  end;

  // 配置横轴显示自定义标签
  with FChart.Axes.Bottom do
  begin
    // 手动添加横轴标签,确保显示Day-1到Day-7
    Labels.Clear;
    Labels.Add('Day-1');
    Labels.Add('Day-2');
    Labels.Add('Day-3');
    Labels.Add('Day-4');
    Labels.Add('Day-5');
    Labels.Add('Day-6');
    Labels.Add('Day-7');
    Title.Text := 'Days';
    // 若需匹配X值范围,可手动设置轴范围
    // Minimum := 0;
    // Maximum := 60;
  end;

  // 添加7天数据
  AddOneDay(1,10,20,30,'Day-1');
  AddOneDay(2,10,20,30,'Day-2');
  AddOneDay(3,10,20,30,'Day-3');
  AddOneDay(4,10,20,30,'Day-4');
  AddOneDay(5,10,20,30,'Day-5');
  AddOneDay(6,10,20,30,'Day-6');
  AddOneDay(7,10,20,30,'Day-7');
end;

额外说明

  • 手动添加横轴标签可以完全控制显示文本,不受X值数值影响;若希望标签与X值自动关联,可将LabelsStyle设为lsLabel,利用数据点的Label属性。
  • 复用系列不仅解决了横轴异常问题,还能减少内存开销,提升图表渲染效率。

内容的提问来源于stack exchange,提问作者Seekr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:12:22