6

両方の曲線をプロットした後、zedgraph コントロールに 2 つの曲線があります...

PointPairList thresholdList = new PointPairList();
PointPairList powerList = new PointPairList();

private void plotPower()
{
        // Create an object to access ZedGraph Pane
        GraphPane pane = zedGraphControl1.GraphPane;            
        LineItem thresholdLine = new LineItem("thresholdLine");
        LineItem powerLine = new LineItem("powerLine");

        // Set the Threshold Limit
        double thresoldLimit = Convert.ToDouble(numAnalysisThreshold2.Value);

        // Points
        double[] x = new double[]{0, pane.XAxis.Scale.Max};
        double[] y = new double[]{thresoldLimit, thresoldLimit};

        // Set the threshold line curve list
        thresholdList.Add(x, y); 

        // Set the Power Line curve list
        powerdList.Add(XData, YData);

        // Add Curves
        thresholdLine = pane.AddCurve("", thresholdList, Color.Red, SymbolType.None);
        powerLine = pane.AddCurve("", powerList, Color.Red, SymbolType.None);

        // Refresh Chart
        this.Invalidate();
        zedGraphControl1.Refresh();
}

上記のコードから、2 つの曲線を電力線曲線としてしきい値曲線の上にプロットすることができました。

今私の質問は、曲線のいずれかを前面に出したい場合....利用可能な方法はありますか(例:bringittoFront()...)...?

お時間をありがとうございました.... :)

4

3 に答える 3

9

GraphPaneにはCurveListプロパティが含まれており、CurveListクラスのサブクラスです。描画する曲線ごとにCurveItem.Tagプロパティを設定すると、メソッドを使用し、 を使用して並べ替え順序を表すことで、曲線アイテムを並べ替えることができるはずです。List<CurveItem>CurveList.Sort(IComparer<CurveItem>)Tag

6月19日更新

簡単な例: 2 つの線、青line2line2.Tag = 2、赤line1line1.Tag = 1. 初期化line2ではグラフペインに先に追加されるので、一番上に表示されます。

void GraphInit()
{
    var line2 = _graph.GraphPane.AddCurve("Second", 
        new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.1 }, Color.Blue);
    line2.Tag = 2;

    var line1 = _graph.GraphPane.AddCurve("First", 
        new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.9 }, Color.Red);
    line1.Tag = 1;

    _graph.Refresh();
}

ソート前の初期表示

ソートするには、最初に を実装し、プロパティIComparer<CurveItem>の数値に基づいて曲線項目を昇順にソートするクラスを実装します。CurveItem Tag

class CurveItemTagComparer : IComparer<CurveItem>
{
    public int Compare(CurveItem x, CurveItem y)
    {
        return ((int)x.Tag).CompareTo((int)y.Tag);
    }
}

再並べ替えを実行してグラフを更新するには、 [並べ替え] ボタンに次のイベント ハンドラーを実装します。

void SortButtonClick(object sender, EventArgs e)
{
    _graph.GraphPane.CurveList.Sort(new CurveItemTagComparer());
    _graph.Refresh();
}

これで、[並べ替え] ボタンをクリックすると、タグ値が最も低い曲線、つまりline1が一番上に描画されるように、曲線が並べ替えられます。さらに、凡例の曲線の順序が変更されていることに注意してください。

ソートボタンクリック後のグラフ

于 2012-06-19T17:40:05.723 に答える
7

非常に簡単な方法があります。クラスのMove()メソッドを使用します。CurveList例:

zedGraphControl1.GraphPane.CurveList.Move(index,relativePos)

に設定relativePosする-1と、オブジェクトはリストの1つ前の1位置に移動し、1つ後の位置に移動します。アイテムをリストの先頭に移動するには、大きな負の値(など-999)を使用します。リストの最後に移動するには、大きな正の値を使用します。

于 2012-10-26T16:35:16.130 に答える
4

そして、必要な人のために、これは vb.net の IComparer クラスのコードです。

    Public Class CurveItemTagComparer
    Implements IComparer(Of CurveItem)
    Function Compare(ByVal x As ZedGraph.CurveItem, ByVal y As ZedGraph.CurveItem) As Integer _
    Implements System.Collections.Generic.IComparer(Of CurveItem).Compare
        Return CInt(x.Tag).CompareTo(CInt(y.Tag))
    End Function
End Class

ジョバンニ

于 2012-10-24T19:36:55.740 に答える