0

我需要用 tpointseries 创建一个恐怖系列,就像这个链接中出现的那样:http ://www.teechart.net/support/viewtopic.php?p=46388

在每个“X”中都会有一些错误序列,但它们需要为每个 XValue 并排绘制。我设法把错误系列,但我怎么能把指针不重叠???

我发现了类似的东西:“有一个 XValues 0、1、2、...的 TErrorSeries,ErrorBar 完全绘制在 X=0、X=1、...但是当你有两个 TErrorSeries 时,它们被绘制一个紧挨着另一个,所以第一个在 X=0, X=1,... 的左侧绘制了一些像素,第二个 TErrorSeries 在 X=0, X=1,.. 的右侧绘制了一些像素. 这是为了适应尽可能多的 TErrorSeries 而不重叠。另一方面,TPointSeries 不做这项工作。他们不会阻止这种重叠。所以,在继续向您提出解决方法之前,我们需要知道您是否希望您的 TErrorSeries 重叠,或者您希望它们为每个 XValue 并排绘制。”

我需要并排绘制,有人可以帮助我吗?

我按照您的建议放置了代码,但仍然继续在 X 轴上重叠的系列(我希望系列并排放置)

procedure TForm1.BtnGraphClick(Sender: TObject);
var
i, j        : Integer;
Series1     : TErrorPointSeries;
x, y        : Double;
Top, Bottom : Double;
max, min, k :array of array of integer;
ndecisor, ncri: integer;

begin
  //Atribuindo valores na Matriz MAX, MIN, K
   SetLength(Max, 3, 3);
   max[0,0]:= 9;
   max[0,1]:= 12;
   max[0,2]:= 14;
   max[1,0]:= 10;
   max[1,1]:= 8;
   max[1,2]:= 13;
   max[2,0]:= 11;
   max[2,1]:= 7;
   max[2,2]:= 10;

    SetLength(Min, 3, 3);
    min[0,0]:= 2;
    min[0,1]:= 0;
    min[0,2]:= 3;
    min[1,0]:= 3;
    min[1,1]:= 1;
    min[1,2]:= 4;
    min[2,0]:= 1;
    min[2,1]:= 2;
    min[2,2]:= 0;

   SetLength(k, 3, 3);
   k[0,0]:= 5;
   k[0,1]:= 8;
   k[0,2]:= 4;
   k[1,0]:= 7;
   k[1,1]:= 5;
   k[1,2]:= 6;
   k[2,0]:= 6;
   k[2,1]:= 7;
   k[2,2]:= 5;

   ndecisor:=3;
   ncri:=3;

 ErrorPointChart.View3D:=False;
 ErrorPointChart.Axes.Left.MinimumOffset:=1;
 ErrorPointChart.Axes.Left.MaximumOffset:=1;

  for i := 0 to ndecisor -1 do
  begin
    Series1:=TErrorPointSeries.Create(ErrorPointChart);
    Series1.Pen.Width:=3;
    ErrorPointChart.AddSeries(Series1);

    Randomize;

   for j := 0 to ncri -1 do
   begin
     x:=j;
     y:=k[j,i];;
     Top:= max[j,i]-k[j,i];
     Bottom:= k[j,i]-min[j,i];
   Series1.Add(x,y,0,0,Top,Bottom);
  end;
end;
end;
4

1 回答 1

0

最简单的选择可能是使用新的TErrorPointSeries来自动处理这个问题。您可以在 TeeChart 程序组的新功能演示中的What's New?\Welcome!\New Series\Error Point部分找到示例。这里有一个例子:

uses TeeErrorPoint;

procedure TForm1.FormCreate(Sender: TObject);
var
  i, j        : Integer;
  Series1     : TErrorPointSeries;
  x, y        : Double;
  Top, Bottom : Double;
begin
  Chart1.View3D:=False;

  for i := 0 to 3 do
  begin
    Series1:=TErrorPointSeries.Create(Self);
    Series1.Pen.Width:=3;
    Chart1.AddSeries(Series1);

    Randomize;

    for j := 0 to 10 do
    begin
      x:=j;
      y:=Random(100);
      Top:= Random(10);
      Bottom:= Random(10);
      Series1.Add(x,y,0,0,Top,Bottom);
    end;
  end;
end;

此外,我们发现了一个问题,即在误差值较大的情况下,垂直轴计算不正确。我们正在调查它,但我们发现设置垂直轴偏移可以解决问题,例如

  Chart1.Axes.Left.MinimumOffset:=1;
  Chart1.Axes.Left.MaximumOffset:=1;

使用您的代码,我得到了这张图片:

我想这就是你所说的“堆叠”的意思。我认为问题是系列重叠,而不是堆叠。由于 TErrorPointSeries 不支持条形、区域或线系列那样的堆叠选项,因此您应该使用稍微不同的 X 值填充 TErrorPointSeries 以模拟此行为,例如:

for j := 0 to ncri -1 do
begin
  x:=j + i*0.3; //Side by side offset.
  y:=k[j,i];;
  Top:= max[j,i]-k[j,i];
  Bottom:= k[j,i]-min[j,i];
  Series1.Add(x,y,0,0,Top,Bottom);
end;

在您的示例中更改上面的代码片段会生成此图表:

并排 TErrorPonitSeries

我想这与您正在寻找的东西相似。

于 2013-09-12T15:34:01.730 回答