2016-08-14 3 views

答えて

3

MSChartコントロールを使用すると、これはまったく難しくありません。

あなたはそのPolar ChartTypeを使用して、必要なものを達成するために、2つのAxesのさまざまなプロパティを設定することができます。ここでは

enter image description here

は一例です。フォームとこのようにそれを設定し、あなたにChart chart1を追加:

:スポークがこれらの軸の値を設定し、90°の回転と15° のステップで0°〜360°から行くように

Series s = chart1.Series[0];   // a reference to the default series 
ChartArea ca = chart1.ChartAreas[0]; // a reference to the default chart area.. 
Axis ax = ca.AxisX;     // and the ewo.. 
Axis ay = ca.AxisY;     // ..axes 

s.ChartType = SeriesChartType.Polar; // set the charttype of the series 
s.MarkerStyle = MarkerStyle.Circle; // display data as.. 
s.SetCustomProperty("PolarDrawingStyle", "Marker"); //.. points, not lines 

ax.Minimum = 0;  
ax.Maximum = 360; 
ax.Interval = 15; 
ax.Crossing = 90; 

最終的にデータ値を考慮する必要があるため、リングの制御が難しくなります。 0-100から行く と仮定すると、y値は、我々は10個のリングを取得するために、これらの設定を使用することができます:あなたのデータ値が異なる範囲を持っている場合は

ay.Minimum = 0;  
ay.Maximum = 100; 
ay.Interval = (ay.Maximum - ay.Minimum)/10; 

あなたは、これらの値を適応させる必要があります!

X-Axisのスポーク数は(Maximum - Minimum)/Intervalです。リングの数は同じですが、Y-Axisの場合は同じです。両方を制御するには、をすべてに設定し、デフォルトのの自動に設定しないことをお勧めします。

空の中心をしたい場合べき

  • がy mimimum値のバッファまたは-1または-2間隔
  • を含むが
  • 1個の又は2環以上を作る白い円を描きますセンターの上で、少しトリッキーな..あなたは、中心とスタイル、それにダミーのデータポイントを追加することができます別の方法として

int cc = s.Points.AddXY(0, ay.Minimum); 
DataPoint dpc = s.Points[cc]; 
dpc.MarkerColor = Color.White; 
dpc.MarkerSize = centerwidth; // tricky! 

centerwidthのための右のサイズを見つけるためにあなたが仕事にスケーリングしたい場合は、テストや、どちらかにしていますxxxPaintイベントで測定します。これは、この答えの範囲を超えています..

+0

ありがとうございました。私のポストの2番目の写真のように、10リングと24セグメントのようにパラメータを変更する必要がありますか? –

+0

これは値によって異なります。スポークの場合は簡単です:x-minimum = 0からx-maximum = 360、x-interval = 15になります。リングはトリッキーです。読みにくいですが、外に出ているようですね。そしてそれらはすべて全く異なる価値を持っていないのですか?これは達成するのは簡単ではありません。それにはいくつかのデータベースのロジックがありますか、それを表示するのではなくデータを定義するチャートですか? - そのような10個のリングを得ることは、上記の公式では問題ではありませんが、最終的にはすべてのラベルが表示されます。 – TaW

+0

はい申し訳ありません私は10のリングだけの写真には、チャートには関係のない番号が必要です。 –

3

これはリサイズにGDIで実装するのは非常に簡単です。新しいユーザーコントロールを作成し、へのOnPaintの機能をオーバーライドします。あなたのサークル(e.Graphics.DrawArc)を描画

  1. E(データ点や線を引くラベル(e.Graphics.DrawString)
  2. を描きます.Graphics.DrawLine)

---------------- EDIT ------------------ 新規作成UserControl:右クリックプロジェクト - >追加 - >ユーザーコントロール

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 
     } 

     private void UserControl1_Paint(object sender, PaintEventArgs e) 
     { 
      e.Graphics.DrawEllipse(Pens.Blue, 0, 0, this.Width, this.Height); 
      e.Graphics.DrawString("90", this.Font, Brushes.Black, new PointF(0, 0)); 
      e.Graphics.DrawLine(Pens.Red, 0,0, this.Width, this.Height); 
     } 
    } 
} 
+0

あなたが私に例を与えるか、私はUserControlを知っていないソースを与えることができます.... –

+0

私はそれを追加しましたが、ペイント関数を呼び出す方法は?私はフォームにusercontrolを追加しましたが、今では(フォームで)Paintイベントを呼び出すことしかできませんか? –

+0

これをユーザーコントロールのpaintイベントに登録します。コントロールを再描画する必要があるときはいつでも、これは起動します。あなたが明示的に呼び出しを再描画する必要がある場合.Refresh() – FloatingKiwi

関連する問題