Шпаргалка по ZedGraph. Как нарисовать несколько графиков в одних осях

Немного рекламы

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда (1.7 МБ).

Проект в примере - SeveralGraphs

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

    return Math.Sin (x) / x;
}

private double f2 (double x)
{
    return Math.Sin (x / 2) / 2;
}

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

    // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
    pane.CurveList.Clear ();

    // Создадим список точек для кривой f1(x)
    PointPairList f1_list = new PointPairList ();

    // Создадим список точек для кривой f2(x)
    PointPairList f2_list = new PointPairList ();

    double xmin = -50;
    double xmax = 50;

    // !!!
    // Заполним массив точек для кривой f1(x)
    for (double x = xmin; x <= xmax; x += 0.01)
    {
        f1_list.Add (x, f1 (x));
    }

    // !!!
    // Заполним массив точек для кривой f2(x)
    // Интервал и шаги по X могут не совпадать на разных кривых
    for (double x = 0; x <= xmax; x += 0.5)
    {
        f2_list.Add (x, f2 (x));
    }

    // !!!
    // Создадим кривую с названием "Sinc",
    // которая будет рисоваться голубым цветом (Color.Blue),
    // Опорные точки выделяться не будут (SymbolType.None)
    LineItem f1_curve = pane.AddCurve ("Sinc", f1_list, Color.Blue, SymbolType.None);

    // !!!
    // Создадим кривую с названием "Sin",
    // которая будет рисоваться красным цветом (Color.Red),
    // Опорные точки будут выделяться плюсиками (SymbolType.Plus)
    LineItem f2_curve = pane.AddCurve ("Sin", f2_list, Color.Red, SymbolType.Plus);

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

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

Вернуться к остальным примерам

Немного рекламы

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
5 stars

Рейтинг 4.7/5. Всего 15 голос(а, ов)



Дмитрий 05.03.2011 - 19:34

добавляю так

PointPairList list1 = new PointPairList();
  PointPairList list2 = new PointPairList();

for (int i = 0; i < tbl_stats.Rows.Count; i++)
            {
                currentdate = Convert.ToDateTime(tbl_stats.Rows[i]["dat"]);
                x = new XDate(currentdate);
                accounts = Сonvert.ToDouble(tbl_stats.Rows[i]["acc"]);
                list1.Add(x, acc);
                cards = Convert.ToDouble(tbl_stats.Rows[i]["cards"]);
                list2.Add(x, cards);
            }           

в итоге: данные суммируются, и второй график отображается выше на значение cards, а должен же с нуля начинаться(. Подскажите, пожалуйста, как решить проблему

Jenyay 05.03.2011 - 21:39

Так сходу ничего подозрительного не вижу, может быть проблема где-то в другом месте?

Дмитрий 06.03.2011 - 14:53

Не знаю даже где - в исходных данных проблем нет - запрос возвращает корректные данные, а вот уже при построении - суммируются(. Больше вроде ничего и не делал с графиком

Федор 10.03.2011 - 09:54

минимальное значение по оси

подскажите, пожалуйста, как установить минимальное значение по оси Y. в случае, когда получаю 1 значение - отображаются четыре единички

Jenyay 10.03.2011 - 10:05

Федор, посмотрите вот этот пример.

Федор 10.03.2011 - 11:31

Jenyay, спасибо.
Возник еще вопросик - можно ли как-то вставить изображение (смайлик) возле title?

Jenyay 10.03.2011 - 21:24

В принципе, картинку можно вставлять с помощью объекта ImageObj по аналогии с рисованием стрелок. Но надо попробовать, можно ли с помощью него рисовать именно в области заголовка.

Федор 11.03.2011 - 11:25

Jenyay, спасибо за подсказку, но почему-то график не строится.
делаю так:

 RectangleF rect = new RectangleF(0, 0, 24, 24);
                System.Drawing.Image img_smilye = System.Drawing.Image.FromFile("~/Images/smiles/smile).png");
                ImageObj smilye = new ImageObj(img_smilye, rect, CoordType.AxisXY2Scale, AlignH.Center, AlignV.Center);
                    myPane.GraphObjList.Add(smilye);

Федор 11.03.2011 - 11:31

оказалась проблема - в пути к файлу.
Подскажите, пожалуйста, как вывести изображение в правом верхнем углу?

Федор 11.03.2011 - 11:57

так - картинку отобразил (просто координаты не в пикселях выражаются). Возникла неведомая проблема - при формировании графиков в цикле - изображение не на всех графиках отображаются

 21.03.2011 - 17:20

Дмитрий, для того чтобы графики не суммировались надо установить значение GraphPane.LineType = LineType.Normal вместо LineType.Stack.

Анна 06.03.2012 - 19:49

Как соеденить точки с одинаковым значением функций??

Как соеденить точки с одинаковым значением функций??


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 806