2016-12-21 16 views
1

グラフ上に灰色の領域(信号の許容範囲)を描画するにはどうすればよいですか?
私は、Winformsクラスと標準のMicrosoft System.Windows.Forms.DataVisualizationクラスを使用します。
これはカスタム範囲である必要があります。これは、開始Yポイントがゼロでない場合があることを意味します。
ポイントは、実行時に1つずつオンラインになります。Winforms Chart - 線グラフに許容範囲を描画します

UPDATE: - それは大丈夫だが、私は2dに出発点を定義する方法がわからない

私はストリップラインを試してみました。これは、XまたはYのみに設定できます。 2番目のグラフ(領域)を使用しようとしましたが、必要なものではありません。

UPDATE2:
@Reza Aghaeiありがとうございました!ここで

素晴らしい作品コード:UPDATE OF

void drawAllowedArea(Point startPoint, Point endPoint, PaintEventArgs e) 
{ 
     var l = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(startPoint.X); 
     var t = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(endPoint.Y); 
     var r = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(endPoint.X); 
     var b = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(startPoint.Y); 
     var rect = RectangleF.FromLTRB(l, t, r, b); 
     using (var br = new SolidBrush(Color.FromArgb(100, Color.Blue))) 
     { 
      e.Graphics.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); 
     } 
     e.Graphics.DrawRectangle(Pens.Red, rect.X, rect.Y, rect.Width, rect.Height); 
} 

//and use this function in chart1_Paint event: 
void chart1_Paint(object sender, PaintEventArgs e) 
{ 
     drawAllowedArea(new Point(20, 50000), new Point(40, 100000), e); 
} 

END ----------------------------- ----------------------------

enter image description here

あなたにたくさんありがとうございました!

+0

私はStripLineを試しました - それは大丈夫ですが、2dで始点を定義する方法はわかりません。これは、XまたはYのみに設定できます。 2番目のグラフ(Area)を使用しようとしましたが、必要なものではありません...さらに、実行時に表示する必要がある(質問に追加します) - オンラインでポイントを1つずつ取得します。 –

+0

[Stripline](http://stackoverflow.com/questions/38958646/winforms-chart-how-to-enable-background-color-gauge/38959173?s=6|0.1465#38959173)は、Rectangleannotation 。しかし、描くことはしばしば十分です。 – TaW

答えて

4

Paintイベントを処理してChartというイベントを処理し、その上に長方形を描画できます。 x軸とy軸の値に基づいて長方形の座標を取得するには、ValueToPixelPosition軸の方法を使用できます。 x軸から(矩形の左:

  • リットル:

    void chart1_Paint(object sender, PaintEventArgs e) 
    { 
        var l = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(3.7); 
        var t = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(45); 
        var r = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(7.2); 
        var b = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(31); 
        var rect = RectangleF.FromLTRB(l, t, r, b); 
        using (var br = new SolidBrush(Color.FromArgb(100,Color.Blue))) 
         e.Graphics.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); 
        e.Graphics.DrawRectangle(Pens.Red, rect.X, rect.Y, rect.Width, rect.Height); 
    } 
    

    上記の値は、あなたは、x軸とy軸の実際の値を使用する必要があり、テストのためだけのランダムな値です。たとえば、軸)

  • T:y軸から矩形の上部()
  • R:x軸から矩形の右()
  • B:y軸から矩形の底()

値がintであることがわかっている場合は、私がテストに使用したfloatではなく、intにキャストすることができます。

+0

ありがとうございました!!!!できます!!! –

+0

あなたは大歓迎です:) –

関連する問題