Зедграф, более одного бара - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь сделать штабелированную панель с zedgraph.Я использовал несколько закодированных примеров, основанных на вопросе на этом сайте.Я сделал некоторые изменения, но я не могу заставить меня работать так, как я хочу.На графике выводятся столбцы, расположенные друг над другом.И когда метод запускается во второй раз, бары с первого раза все еще там, а новые строятся поверх старых баров.

Требуемый вывод: я хочу видеть столбец с накоплением для каждогоцелое число у меня в списке.Но это должно быть так, что первое целое число в listA находится на той же строке, что и первое в listB.

        zedGraphControl1.GraphPane.CurveList.Clear();
        zedGraphControl1.GraphPane.GraphObjList.Clear();
        //I want to clear my chart, and write a new one. I dont think the above works??^^^

        GraphPane myPane = zedGraphControl1.GraphPane;

        myPane.BarSettings.Type = BarType.PercentStack;
        myPane.XAxis.Type = ZedGraph.AxisType.Date;

        PointPairList PPLa = new PointPairList();
        PointPairList PPLb = new PointPairList();
        PointPairList PPLc = new PointPairList();
        PointPairList PPLd = new PointPairList();
        PointPairList PPLf = new PointPairList();
        List<int> listA = new List<int>();
        List<int> listB = new List<int>();
        List<int> listC = new List<int>();
        List<int> listD = new List<int>();
        List<int> listF = new List<int>();
        listA = getIntA()
        listB = getIntB()
        listC = getIntC()
        listD = getIntD()
        listF = getIntF()

        int Max = listA.Count;
        //^^ I've made this line to control how many times the loop should run.

        for (int i = 0; i < Max; i++)
        {
            DateTime dtime = DateTime.Now;
            double date = (double)new XDate(dtime);

            int som1;
            for(som1 = 0; som1 <= (listA.Count - 1); som1++)
            {
                int a = listA[i];
                PPLa.Add(date, (double)a);

            }

            int som2;
            for (som2 = 0; som2 <= (listB.Count - 1); som2++)
            {
                int b = listB[i];
                PPLb.Add(date, (double)b);

            }

            int som3;
            for (som3 = 0; som3 <= (listC.Count - 1); som3++)
            {
                int c = listC[i];
                PPLc.Add(date, (double)c);

            }

            int som4;
            for (som4 = 0; som4 <= (listD.Count - 1); som4++)
            {
                int d = listD[i];
                PPLd.Add(date, (double)d);

            }

            int som5;
            for (som5 = 0; som5 <= (listF.Count - 1); som5++)
            {
                int f = listF[i];
                PPLf.Add(date, (double)f);

            }



            BarItem myBara = myPane.AddBar("A", PPLa, Color.Red);
            BarItem myBarb = myPane.AddBar("B", PPLb, Color.Blue);
            BarItem myBarc = myPane.AddBar("C", PPLc, Color.Gray);
            BarItem myBard = myPane.AddBar("D", PPLd, Color.Black);
            BarItem myBarf = myPane.AddBar("F", PPLf, Color.Pink);


            zedGraphControl1.AxisChange();



        }
        zg1.AxisChange();

Надеюсь, вы понимаете.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

(Один) проект Zedgraph, который я делал, я всегда делал что-то вроде:

master = zedGraphDruck.MasterPane;
master.GraphObjList.Clear();
master.PaneList.Clear();
GraphPane g = new GraphPane(gpr, titel, null, null);
...
master.Add(g);
zedGraphDruck.AxisChange();
zedGraphDruck.Invalidate();

с gpr, являющимся (новым) прямоугольником с требуемым размером и заголовком строки;

0 голосов
/ 07 декабря 2011
    private void graph2()
    {
        zedGraphControl1.GraphPane.CurveList.Clear();
        zedGraphControl1.GraphPane.GraphObjList.Clear();
        // clearing not tested

        GraphPane myPane = zedGraphControl1.GraphPane;

        myPane.BarSettings.Type = BarType.PercentStack;
        //      myPane.XAxis.Type = ZedGraph.AxisType.Date;
        // Date wont work in our case

        PointPairList PPLa = new PointPairList();
        PointPairList PPLb = new PointPairList();
        PointPairList PPLc = new PointPairList();
        PointPairList PPLd = new PointPairList();
        PointPairList PPLf = new PointPairList();
        List<int> listA = new List<int>();
        List<int> listB = new List<int>();
        List<int> listC = new List<int>();
        List<int> listD = new List<int>();
        List<int> listF = new List<int>();
        //listA = getIntA();
        //listB = getIntB();
        //listC = getIntC();
        //listD = getIntD();
        //listF = getIntF();

        for (int i = 0; i < 5; i++)
        {
            listA.Add(i);
            listB.Add(i + 1);
            listC.Add(i);
        }
        // above is used to fill up the lists (for example)
        // be aware that listA[0] = 0 for i = 1, (will be vissible in chart)


        // when you us < instead of <= you dont need a listA.Count - 1
        // below is not failsafe, if any list is smaller than listA an error may appear
        // this is just a sample so i thought it wouldnt matter
        for (int i = 0; i < listA.Count; i++)
        {
            PPLa.Add(i, (double)listA[i]);
            PPLb.Add(i, (double)listB[i]);
            PPLc.Add(i, (double)listC[i]);
            PPLd.Add(i, (double)listA[i]);
            PPLf.Add(i, (double)listB[i]);
        }

        // dragged drawing baritems out of forloop
        BarItem myBara = myPane.AddBar("A", PPLa, Color.Red);
        BarItem myBarb = myPane.AddBar("B", PPLb, Color.Blue);
        BarItem myBarc = myPane.AddBar("C", PPLc, Color.Gray);
        BarItem myBard = myPane.AddBar("D", PPLd, Color.Black);
        BarItem myBarf = myPane.AddBar("F", PPLf, Color.Pink);

        zedGraphControl1.AxisChange();
    }
...