グラフに関してですが、
レーダーチャートで
データをグラフ化したいのですが、
有償・無償とか(できれば無償がいいのですが)の問題も
ありますが、何か知っている情報があれば
教えて頂きたいのですが・・・。
Delphi2010で開発です。
使ったことはありませんが、
TeeChart Pro 8J
http://www.newtone.co.jp/producttc800.html
は、いかがですか?
コンポーネントではないが
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;
返信が遅くなりました。
>>igy様
少し値がはりますね・・・。
>>KHE00221
すばらしいソースありがとうございます。
これを改良すれば、OKのようです。
ツイート | ![]() |