0

Using a TChart, on the yAxis, I have data ranging in integer value from 0 - 100,000. How can I format the label on the TChart in such a way that if the range of the current series is from 10,000-100,000 it reads on the chart as 10k, 50k, 90, 100k, etc. This is for a mobile app so the purpose of this is to conserve space on phones to maximize the chart display.

Using Delphi Seattle, FMX, developing for iOS/Android

ThisGuy
  • 1,405
  • 1
  • 24
  • 51

1 Answers1

2

There appears to be a number of possibilities, here is one approach using GetAxisLabel. The key for me was setting the label style to talText.

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMXTee.Engine,
  FMXTee.Series, FMXTee.Procs, FMXTee.Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    procedure Chart1GetAxisLabel(Sender: TChartAxis; Series: TChartSeries;
      ValueIndex: Integer; var LabelText: string);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    fSeries: TPointSeries;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis; Series: TChartSeries;
  ValueIndex: Integer; var LabelText: string);
begin
  if (fSeries = Series) then
  begin
    LabelText := IntToStr(Round(Series.YValue[ValueIndex] / 1000)) + 'K';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: NativeInt;
begin
  fSeries := TPointSeries.Create(self);
  fSeries.ParentChart := Chart1;
  for i := 1 to 10 do
  begin
    fSeries.Add(i * 10000);
  end;
  Chart1.Axes.Left.LabelStyle := talText;
end;

end.