Форум Кургана и Курганской области и наших друзей

Зима. Форум Кургана и Курганской области и наших друзей
30 Ноябрь 2020, 00:21:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: C# ZedGraph  (Прочитано 9928 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« : 15 Февраль 2011, 23:55:21 »

Доброго времени суток всем. У меня возникла такая проблема. Рисую 1000 графиков с помощью библиотеки ZedGraph. Затем мне нужно нарисовать еще один график другим цветом поверх всех остальных, но он рисуется под остальными. Подскажите что сделать пожалуйста.
Записан
ysv45
Гость
« Ответ #1 : 16 Февраль 2011, 00:06:41 »

Текст приведите.
Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #2 : 16 Февраль 2011, 00:09:27 »

Код:
private void button1_Click(object sender, EventArgs e)
        {
            H.PirsonMas(int.Parse(textBox1.Text));
            int m = 0;
            zedGraph.GraphPane.CurveList.Clear();
            PointPairList list = new PointPairList();
            GraphPane pane = zedGraph.GraphPane;
            pane.XAxis.Scale.Min = 1;
            pane.XAxis.Scale.Max = int.Parse(textBox1.Text);
            pane.XAxis.Type = AxisType.Log;
            while (m != int.Parse(textBox2.Text))
            {
                H.Chastot(int.Parse(textBox1.Text));
                // Заполняем список точек.
                for (int x = 1; x < int.Parse(textBox1.Text); x++)
                {    // добавим в список точку
                    list.Add((double)x, H.Or[x - 1].ch);
                }
                    LineItem myCurve = pane.AddCurve("", list, Color.Red, SymbolType.None);
                // Установим масштаб для оси Y
                pane.YAxis.Scale.Min = 0;
                pane.YAxis.Scale.Max = 1;

                // Включим сглаживание
                myCurve.Line.IsAntiAlias = true;
                myCurve.Line.Width = 1;
                H.O = 0;
                H.chO = 0;
                H.Or.Clear();
                m++;
                list = new PointPairList();
               
            }
           
            GraphPane P = zedGraph.GraphPane;
             
            PointPairList L = new PointPairList();
            LineItem Li = P.AddCurve("", L, Color.DarkGreen, SymbolType.None);
            Li.Line.Width = 3;

            for (int i = 0; i < int.Parse(textBox1.Text); i++)
            {
                H.ChastotMas[i] = H.ChastotMas[i] / int.Parse(textBox2.Text);
            }


            for (int i = 1; i <= int.Parse(textBox1.Text); i++)
            {
                L.Add(i, H.ChastotMas[i-1]);

            }
            Li.Line.IsAntiAlias = true;
            //Обновим график
            zedGraph.AxisChange();
            zedGraph.Invalidate();
            Orel.Text = Convert.ToString(Math.Round(H.ChastotMas[int.Parse(textBox1.Text) - 1], 3));
           

        }
Записан
ysv45
Гость
« Ответ #3 : 16 Февраль 2011, 00:15:48 »

GraphPane pane = zedGraph.GraphPane;

Зачем два раза?
Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #4 : 16 Февраль 2011, 00:18:32 »

Прочитал в руководстве по ZedGraph. А вообще определяем панель рисования.
Записан
ysv45
Гость
« Ответ #5 : 16 Февраль 2011, 00:28:42 »

Прочитал в руководстве по ZedGraph. А вообще определяем панель рисования.

Один раз вроде хватит. Попробуйте убрать.

Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #6 : 16 Февраль 2011, 00:32:21 »

Ничего не изменилось Грустный
Записан
ysv45
Гость
« Ответ #7 : 16 Февраль 2011, 00:33:38 »

Оформлять лучше так:

private double f (double x)
{
    if (x == 0)
    {
        return 1;
    }

    return Math.Sin (x) / x;
}

private void DrawGraph ()
{
    // Получим панель для рисования
    GraphPane pane = zedGraph.GraphPane;

    pane.CurveList.Clear ();

    // Нарисуем три кривые с разными стилями
    AddCurve1 (pane);
    AddCurve2 (pane);
    AddCurve3 (pane);

    // Вызываем метод AxisChange (), чтобы обновить данные об осях.
    // В противном случае на рисунке будет показана только часть графика,
    // которая умещается в интервалы по осям, установленные по умолчанию
    zedGraph.AxisChange ();

    // Обновляем график
    zedGraph.Invalidate ();
}

/// <summary>
/// Нарисовать кривую в виде точек
/// </summary>
private void AddCurve1 (GraphPane pane)
{
    PointPairList list = new PointPairList ();

    double xmin = -20;
    double xmax = 20;

    for (double x = xmin; x <= xmax; x += 0.1)
    {
        list.Add (x, f (x));
    }

    LineItem myCurve = pane.AddCurve ("Curve 1", list, Color.Blue, SymbolType.None);

    // Используем предустановленный стиль, рисующий кривую точками.
    // Идентификатор стиля определен в System.Drawing.Drawing2D.DashStyle.
    myCurve.Line.Style = DashStyle.Dot;

    // Укажем, что график должен быть сглажен,
    // иначе несплошные линии будут выглядеть неаккуратно.
    // Это происходит из-за того, что без использования сглаживания
    // ZedGraph будет каждый участок линии рисовать независимо от соседних.
    myCurve.Line.IsSmooth = true;
}


/// <summary>
/// Нарисовать кривую в виде штрихпунктирной линии
/// </summary>
private void AddCurve2 (GraphPane pane)
{
    PointPairList list = new PointPairList ();

    double xmin = -20;
    double xmax = 20;

    for (double x = xmin; x <= xmax; x += 0.1)
    {
        list.Add (x, f (2 * x));
    }

    LineItem myCurve = pane.AddCurve ("Curve 2", list, Color.Black, SymbolType.None);

    // Используем предустановленный стиль, рисующий кривую в виде штрихпунктирной линии.
    myCurve.Line.Style = DashStyle.DashDot;

    // Укажем, что график должен быть сглажен
    myCurve.Line.IsSmooth = true;
}

/// <summary>
/// Нарисовать кривую нестандартным стилем
/// </summary>
private void AddCurve3 (GraphPane pane)
{
    PointPairList list = new PointPairList ();

    double xmin = -20;
    double xmax = 20;

    for (double x = xmin; x <= xmax; x += 0.1)
    {
        list.Add (x, f (0.1 * x));
    }

    LineItem myCurve = pane.AddCurve ("Curve 3", list, Color.Brown, SymbolType.None);

    // Определим свой стиль рисования линии
    myCurve.Line.Style = DashStyle.Custom;

    // Длина пунктира будет 10 у.е. (1 у.е = 1/72 inch)
    myCurve.Line.DashOn = 10.0f;

    // Длина пропуска между пунктирами
    myCurve.Line.DashOff = 3.0f;

    // Укажем, что график должен быть сглажен
    myCurve.Line.IsSmooth = true;
}
Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #8 : 16 Февраль 2011, 00:50:21 »

Скопировал ваш пример, подправил. Но вот график, который строится первым все равно перекрывает последующие графики, я толшину линий увеличил и это заметно стало. А у меня в этом весь смысл, чтобы последний график показывал среднее значение всех остальных графиков Грустный
Записан
ysv45
Гость
« Ответ #9 : 16 Февраль 2011, 00:54:25 »

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

А поменять местами порядок построения?
Записан
ysv45
Гость
« Ответ #10 : 16 Февраль 2011, 00:59:32 »

Кстати http://jenyay.net/Programming/ZedGraph
Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #11 : 16 Февраль 2011, 01:01:59 »

Да конечно можно поменять местами. Но задача идет о моделировании подбрасывания монетки и подсчету частоты выпадения орла при каждом подбрасывании. Подбрасывания осуществляются в несколько серий. Если мы меняем местами и берем 1000 серий по 1000 подбрасываний.
То  нужно просчитать частоту в  каждом подбрасывании, вычислить среднее и постороить этот график. А потом придется снова, это же считать и строить те графики. Тут производительность уменьшается в 2 раза. Ну, а хранить 1000 графиков в памяти я просто не знаю как Грустный
То что вы дали ссылку, я по ней и учился пользоваться этой библиотечкой.
Записан
ysv45
Гость
« Ответ #12 : 16 Февраль 2011, 01:09:18 »

Может этот пример подойдет http://www.zedgraph.org/wiki/index.php?title=Contour_Chart_Demo
Записан
ysv45
Гость
« Ответ #13 : 16 Февраль 2011, 01:14:04 »

И еще http://gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/21/aft/6462/afv/topic/Default.aspx

пример не рабочий, но там есть приемы работы с уровнем и построением в памяти.
Записан
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« Ответ #14 : 16 Февраль 2011, 01:21:53 »

Спасибо Улыбка Эх переводить придется Грустный
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC
rss | wap
Valid XHTML 1.0! Valid CSS!