レーダーチャートでグラフ化するには

解決


ない  2010-09-25 00:09:10  No: 39211

グラフに関してですが、
レーダーチャートで
データをグラフ化したいのですが、
有償・無償とか(できれば無償がいいのですが)の問題も
ありますが、何か知っている情報があれば
教えて頂きたいのですが・・・。

Delphi2010で開発です。


igy  2010-09-25 05:18:43  No: 39212

使ったことはありませんが、

TeeChart Pro 8J
http://www.newtone.co.jp/producttc800.html

は、いかがですか?


KHE00221  2010-09-28 11:06:11  No: 39213

コンポーネントではないが

procedure TForm3.Button1Click(Sender: TObject);
var
    Data: array[0..1,0..6] of Integer;
    DText: array[0..6] of String;
    P: array[0..6] of TPoint;
    C: array[0..1] of TColor;
    R: array[0..3] of Integer;
    RText: array[0..3] of String;

    DL,I,I2,X,Y,R2,W,X2,Y2,Radius: Integer;
    RD,J: Extended;
    L,T: Integer;
    Max: Integer;
begin

    Image1.Width := 400;
    Image1.Height := 400;

    RD := 3.141592653 / 180;

    //中央の位置
    L := Image1.Width  div 2;
    T := Image1.Height div 2;

    //円の半径
    Radius := 150;

    //線の位置
    R[3] := Trunc(Radius * 0.25);     RText[3] := ' 25%';
    R[2] := Trunc(Radius * 0.5);      RText[2] := ' 50%';
    R[1] := Trunc(Radius * 0.75);     RText[1] := ' 75%';
    R[0] := Trunc(Radius * 1.00);     RText[0] := '100%';

    //データの最大値
    Max := 240;

    //線の色
    C[0] := clRed;
    C[1] := clBlue;

    //データ長(何角形にするか)
    DL := High(Data[0]) - Low(Data[0]) + 1;

    //データ
    Data[0,0] := 240; Data[1,0] := 120;  DText[0] := '項目1';
    Data[0,1] := 120; Data[1,1] := 160;  DText[1] := '項目2';
    Data[0,2] := 240; Data[1,2] :=  40;  DText[2] := '項目3';
    Data[0,3] :=  80; Data[1,3] := 190;  DText[3] := '項目4';
    Data[0,4] := 100; Data[1,4] := 290;  DText[4] := '項目5';
    Data[0,5] := 160; Data[1,5] :=  80;  DText[5] := '項目6';
    Data[0,6] := 220; Data[1,6] := 120;  DText[6] := '項目7';

    Image1.Canvas.Font.Size := 8;
    Image1.Canvas.Font.Color := clBlack;

    //背景の線
    for I2 := Low(R) to High(R) do
    begin
      J := 0;
      for I := Low(Data[0]) to High(Data[0]) do
      begin
        X := Trunc(Sin(RD*(180-(J)))*(R[I2]));
        Y := Trunc(Cos(RD*(180-(J)))*(R[I2]));
        if I=Low(Data[0]) then
        begin
          W := Image1.Canvas.TextWidth(Text[I2]);
          Image1.Canvas.TextOut(L+X-W-2,T+Y-5,RText[I2]);
        end;
        if I2=Low(R) then
        begin
          Image1.Canvas.MoveTo(L,T);
          Image1.Canvas.LineTo(L+X,T+Y);
        end;

        if I2 = 0 then
        begin
          X2 := Trunc(Sin(RD*(180-(J)))*(R[I2]+10));
          Y2 := Trunc(Cos(RD*(180-(J)))*(R[I2]+10));
          if X2 < 0 then
          begin
            W := Image1.Canvas.TextWidth(DText[I]);
          end
          else
          begin
            W := 0;
          end;
          Image1.Canvas.TextOut(L+X2-W,T+Y2,DText[I]);
        end;

        P[I].X := L+X;
        P[I].Y := T+Y;
        J := J + 360 / DL;

      end;
      Image1.Canvas.Pen.Color := clBlack;
      Image1.Canvas.Brush.Style := bsClear;
      Image1.Canvas.Polygon(P);
    end;

    //データの線
    for I2 := 0 to 1 do
    begin
      J := 0;
      for I := Low(Data[0]) to High(Data[0]) do
      begin
        R2 := Trunc(Radius / Max * Data[I2,I]);
        X := Trunc(Sin(RD*(180-(J)))*(R2));
        Y := Trunc(Cos(RD*(180-(J)))*(R2));
        P[I].X := L+X;
        P[I].Y := T+Y;
        J := J + 360 / DL;
      end;
      Image1.Canvas.Pen.Color := C[I2];
      Image1.Canvas.Brush.Style := bsClear;
      Image1.Canvas.Pen.Width := 3;
      Image1.Canvas.Polygon(P);
    end;

end;


ない  2010-11-09 23:45:56  No: 39214

返信が遅くなりました。
>>igy様
少し値がはりますね・・・。

>>KHE00221
すばらしいソースありがとうございます。
これを改良すれば、OKのようです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加