掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
レーダーチャートでグラフ化するには (ID:39213)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンポーネントではないが 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;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.