0

現在、ZedGraph を使用して曲線を表示しています。ZedGraph コントロール上の曲線の特定の領域をマークし、次のようにラベルを付けたいと思います。

ここに画像の説明を入力

注: テキスト サイズに基づいて、X 軸と Y 軸に異なる種類のマーキングが必要です。

事前にご協力いただきありがとうございます。

4

1 に答える 1

1

2 つのオプションがあります。

1) BoxObjectを使用して、次のように特定の領域に描画します

ここに画像の説明を入力

ソースコードは次のように使用できます。

 private void Form1_Load(object sender, EventArgs e)
    {
        // Create an instance of Graph Pane
        GraphPane myPane = zedGraphControl1.GraphPane;

        // Build a PointPairList with points based on Sine wave
        PointPairList list = new PointPairList();
        for (double i = 0; i < 36; i++)
        {
            double x = i * 10.0 + 50.0;
            double y = Math.Sin(i * Math.PI / 15.0) * 16.0;
            list.Add(x, y);
        }

        // Hide the legend
        myPane.Legend.IsVisible = false;

        // Add a curve
        LineItem curve = myPane.AddCurve("label", list, Color.Red, SymbolType.Circle);
        curve.Line.Width = 1.5F;
        curve.Symbol.Fill = new Fill(Color.White);
        curve.Symbol.Size = 5;

        // Make the XAxis start with the first label at 50
        myPane.XAxis.Scale.BaseTic = 50;

        // Fill the axis background with a gradient
        myPane.Chart.Fill = new Fill(Color.White, Color.SteelBlue, 45.0F); 

        // Draw Region 1
        drawRegion(list[0].X, list[10].X,"Positive Cycle");

        // Calculate the Axis Scale Ranges
        zedGraphControl1.AxisChange();

        // Refresh to paint the graph components
        Refresh(); 
    }

    private void drawRegion(double xMin, double xMax, string regName)
    {
        GraphPane pane = zedGraphControl1.GraphPane;

        BoxObj box = new BoxObj(xMin,20, xMax, 40.0, Color.Empty, Color.LightSteelBlue);// Color.FromArgb(225, 245, 225));
        box.Location.CoordinateFrame = CoordType.AxisXYScale;
        box.Location.AlignH = AlignH.Left;
        box.Location.AlignV = AlignV.Top;

        // place the box behind the axis items, so the grid is drawn on top of it
        box.ZOrder = ZOrder.E_BehindCurves;//.D_BehindAxis;//.E_BehindAxis;
        pane.GraphObjList.Add(box);

        // Add Region text inside the box 
        TextObj myText = new TextObj(regName, 160, -15);
        myText.Location.CoordinateFrame = CoordType.AxisXYScale;
        myText.Location.AlignH = AlignH.Right;
        myText.Location.AlignV = AlignV.Center;
        myText.FontSpec.IsItalic = true;
        myText.FontSpec.IsBold = false;
        myText.FontSpec.FontColor = Color.Red;
        myText.FontSpec.Fill.IsVisible = false;
        myText.FontSpec.Border.IsVisible = false;
        pane.GraphObjList.Add(myText);

        zedGraphControl1.Refresh();
    }

2) これは少し難しいですが実行可能です。ここで説明する個々の垂直線を描画します: 12必要なテキストなどを追加します。

を使用することをお勧めしますoption 1。これは 2 よりもはるかに簡単です!

于 2013-07-05T11:39:47.957 に答える