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

如何在TMS FNC Charts中为两个系列共用一组坐标轴?

解决Delphi图表重复坐标轴问题

你的图表出现左侧和底部重复坐标轴的原因是:每个新增的Series默认会自动创建一套独立的X/Y坐标轴,两个Series就会生成两组重复的坐标轴。下面是两种解决方法,推荐使用第一种:

方法1:让多个Series共用同一组坐标轴(推荐)

在创建第二个Series(最高温系列)后,将它的X、Y坐标轴绑定到第一个Series的坐标轴,或者直接绑定到图表的主坐标轴,这样就不会生成新的重复坐标轴。

修改后的完整代码如下:

procedure TForm1.Button1Click(Sender: TObject);
const
  CMin: array[1..31] of Double = (
    15, 16, 14, 13, 15, 17, 16, 14, 13, 12,
    15, 16, 18, 17, 16, 14, 15, 18, 19, 17,
    16, 15, 14, 13, 12, 14, 15, 17, 16, 15, 14
  );
  CMax: array[1..31] of Double = (
    28, 29, 30, 27, 26, 31, 32, 29, 28, 27,
    30, 31, 33, 32, 31, 29, 30, 33, 34, 32,
    31, 30, 29, 28, 27, 29, 30, 32, 31, 30, 29
  );
begin
  var lYear := 2025;
  var lMonth := 10;
  var lDaysInMonth := DaysInAMonth(lYear, lMonth);
  TemperatureChart.BeginUpdate;
  try
    TemperatureChart.Series.Clear;
    // Min series
    var sMin := TemperatureChart.Series.Add;
    sMin.LegendText := 'Min (°C)';
    sMin.XValues.MajorUnit := 1;
    sMin.XValues.MajorUnitFormat := '%.0f';
    sMin.YValues.MajorUnitFormat := '%.0f';
    // Max series
    var sMax := TemperatureChart.Series.Add;
    sMax.LegendText := 'Max (°C)';
    // 关键:让最高温系列共用最低温系列的坐标轴
    sMax.XAxis := sMin.XAxis;
    sMax.YAxis := sMin.YAxis;
    sMax.XValues.MajorUnit := 1;
    sMax.XValues.MajorUnitFormat := '%.0f';
    sMax.YValues.MajorUnitFormat := '%.0f';
    // Add points for each day of the selected month
    for var d := 1 to lDaysInMonth do
    begin
      with sMin.Points.Add do
      begin
        XValue := d;
        YValue := CMin[d];
      end;
      with sMax.Points.Add do
      begin
        XValue := d;
        YValue := CMax[d];
      end;
    end;
    // Update chart title
    var lMonthName := FormatDateTime('mmm', EncodeDate(lYear, lMonth, 1));
    TemperatureChart.Title.Text := Format('Temperature (Test Data) - %s %d', [lMonthName, lYear]);
  finally
    TemperatureChart.EndUpdate;
  end;
end;

你也可以直接绑定到图表的主坐标轴,效果一样:

// 替换上面的两行绑定代码
sMax.XAxis := TemperatureChart.Axes.Bottom;
sMax.YAxis := TemperatureChart.Axes.Left;

方法2:直接隐藏多余的坐标轴

如果已经生成了重复坐标轴,可以通过设置对应坐标轴的Visible属性为False来隐藏。需要注意坐标轴的索引顺序(默认第一个Series对应索引0、1的X/Y轴,第二个对应2、3):

// 在Chart.EndUpdate之前添加
TemperatureChart.Axes.Items[2].Visible := False; // 隐藏第二个X轴(底部)
TemperatureChart.Axes.Items[3].Visible := False; // 隐藏第二个Y轴(左侧)

这种方法适合临时处理,但如果后续新增Series,可能会再次生成重复坐标轴,因此更推荐方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:58:11