Все примеры объединены в одном 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 ();
}
Вернуться к остальным примерам
Пожалуйста, оцените материал
Рейтинг 5.0/5. Всего 6 голос(а, ов)
Дмитрий 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
Не знаю даже где - в исходных данных проблем нет - запрос возвращает корректные данные, а вот уже при построении - суммируются(. Больше вроде ничего и не делал с графиком
минимальное значение по оси
подскажите, пожалуйста, как установить минимальное значение по оси Y. в случае, когда получаю 1 значение - отображаются четыре единички
Jenyay 10.03.2011 - 10:05
Федор, посмотрите вот этот пример.
Jenyay, спасибо.
Возник еще вопросик - можно ли как-то вставить изображение (смайлик) возле title?
Jenyay 10.03.2011 - 21:24
В принципе, картинку можно вставлять с помощью объекта ImageObj по аналогии с рисованием стрелок. Но надо попробовать, можно ли с помощью него рисовать именно в области заголовка.
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);
оказалась проблема - в пути к файлу.
Подскажите, пожалуйста, как вывести изображение в правом верхнем углу?
так - картинку отобразил (просто координаты не в пикселях выражаются). Возникла неведомая проблема - при формировании графиков в цикле - изображение не на всех графиках отображаются
Дмитрий, для того чтобы графики не суммировались надо установить значение GraphPane.LineType = LineType.Normal вместо LineType.Stack.