4

マイナーダニに関して非常に具体的なリクエストがあります。私のクライアントは、10 年ごとにマイナー ティックの数が異なるグラフを求めています。たとえば、10 年が 1 未満の場合、10 個のラベル (1、2、3、4、5、6、7、8、9、10) と次のマイナー ティック (1.5、2.5、3.5、4.5、5.5) が必要です。 、6.5、7.5、8.5、9.5)

10 年が 1 ~ 2 の場合、次のラベル (1、2、3、4、5、6、8、10) と次の小目盛り (1.5、2.5、3.5、4.5、5.5、7、9) が必要です。

どんな助けでも大歓迎です。目盛りをオーバーライドする方法が見つからないため、カスタム ポイントに配置できます。私はカスタムラベルを見つけました。

ありがとう

4

2 に答える 2

2

ここであなたに答えました。DrawMinorTickカスタム ラベルを使用して不規則なラベルを描画し、不規則なカスタム マイナー ティックを手動で描画する関数を作成する、最後のより複雑な例のコードをここに投稿します。

uses Series, TeCanvas;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Chart1.View3D:=false;
  Chart1.Legend.Visible:=false;

  Chart1.AddSeries(TFastLineSeries).FillSampleValues(10);
  for i:=0 to Chart1[0].Count-1 do
    Chart1[0].XValue[i]:=i+1;

  Chart1.Axes.Bottom.Items.Clear;
  for i:=1 to 4 do
    Chart1.Axes.Bottom.Items.Add(i, IntToStr(i));

  Chart1.Axes.Bottom.Items.Add(7, '7');
  Chart1.Axes.Bottom.Items.Add(10, '10');

  Chart1.Axes.Bottom.MinorTickCount:=0;
end;

procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
  DrawMinorTick(Chart1.Axes.Bottom, 1.5);
  DrawMinorTick(Chart1.Axes.Bottom, 2.5);
  DrawMinorTick(Chart1.Axes.Bottom, 5);
  DrawMinorTick(Chart1.Axes.Bottom, 6);
  DrawMinorTick(Chart1.Axes.Bottom, 8);
  DrawMinorTick(Chart1.Axes.Bottom, 9);
end;

procedure TForm1.DrawMinorTick(axis: TChartAxis; value: double);
var XPos, YPos: Integer;
begin
  Chart1.Canvas.Pen.Color:=axis.MinorTicks.Color;
  Chart1.Canvas.Pen.Width:=axis.MinorTicks.Width;
  Chart1.Canvas.Pen.Style:=axis.MinorTicks.Style;
  if axis.Horizontal then
  begin
    XPos:=axis.CalcPosValue(value);
    YPos:=axis.PosAxis+1;
    Chart1.Canvas.Line(XPos, YPos, XPos, YPos+axis.MinorTickLength);
  end
  else
  begin
    XPos:=axis.PosAxis;
    YPos:=axis.CalcPosValue(value);
    Chart1.Canvas.Line(XPos, YPos, XPos-axis.MinorTickLength, YPos);
  end;
end;
于 2012-12-17T12:17:41.833 に答える
1

TeeChart のソース コード (v2010) を読みました。カスタマイズの余地はありませんOnGetNextAxisLabel

非対数軸の場合、副目盛りはラベル間に等間隔で描画されます。

対数軸の場合、少なくとも等間隔でないラベルの場合、小目盛はラベル間に等間隔で描画されません。実際、私のコードでは、対数軸を使用するときは常にマイナー ティックを無効にしていることがわかります。それは、まったく機能しないからだと思います。

したがって、あなたの唯一の選択肢は、ソースコードを自分で変更することだと思います.

于 2012-12-16T15:26:08.633 に答える