Шпаргалка по ZedGraph. Гистограммы и текстовые оси | jenyay.net

Шпаргалка по ZedGraph. Гистограммы и текстовые оси

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

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

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

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

    int itemscount = 5;

    Random rnd = new Random ();

    // Подписи под столбиками
    string[] names = new string[itemscount];

    // Высота столбиков
    double[] values = new double[itemscount];

    // Заполним данные
    for (int i = 0; i < itemscount; i++)
    {
        names[i] = string.Format ("Текст {0}", i);
        values[i] = rnd.NextDouble ();
    }

    // Создадим кривую-гистограмму
    // Первый параметр - название кривой для легенды
    // Второй параметр - значения для оси X, т.к. у нас по этой оси будет идти текст, а функция ожидает тип параметра double[], то пока передаем null
    // Третий параметр - значения для оси Y
    // Четвертый параметр - цвет
    BarItem curve = pane.AddBar ("Гистограмма", null, values, Color.Blue);

    // Настроим ось X так, чтобы она отображала текстовые данные
    pane.XAxis.Type = AxisType.Text;

    // Уставим для оси наши подписи
    pane.XAxis.Scale.TextLabels = names;

    // Вызываем метод AxisChange (), чтобы обновить данные об осях.
    zedGraph.AxisChange ();

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

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

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

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



Ффф 12.12.2009 - 01:06

А как поменять ширину столбцов гистограммы?

Jenyay 12.12.2009 - 09:10

Ффф, как раз про изменение ширины столбцов я планировал сделать следующий пример. А так можете посмотреть здесь описание настроек Bar'а, особенно обратите внимание на свойство ClusterScaleWidth.

Ффф 14.12.2009 - 01:34

Спасибо. Вообще примеры хорошие. Просто и понятно описано. Так держать.

Jenyay 14.12.2009 - 08:50

Спасибо, очень приятно. :)

Ффф 14.01.2010 - 20:06

Таки можно мануал по ширине столбцов гистограммы? :)

Jenyay 14.01.2010 - 20:58

Ффф, вот недавно выложил - BarWidth и BarClusters. Проще менять не ширину столбцов, а отступы между ними.

Ффф 15.01.2010 - 01:20

Ура. Спасибо

Anoha 25.06.2010 - 08:10

Столкнулся с проблемой раскраски гистограммы. необходимо раскрасить столбики в этом графике http://s003.radikal.ru/i203/1006/d2/8b2f347a7bab.png
этот график строил как в примере, также пробовал в цикле добавлять по одному бару. получается что все они строятся в первом кластере. вот так http://i055.radikal.ru/1006/1b/64243499b8f2.png
Можно ли как- нибудь привязаться к текстовым меткам по Х?

Jenyay 03.07.2010 - 17:29

Anoha, я правильно понял, что нужно независимо раскрашивать отдельные столбики, при этом на каждое значение по оси X будет только один столбик?

Если так, то можно разделить все столбики по отдельным графикам так, чтобы каждый график рисовался бы одним цветом. То есть сначала нарисовать все синие столбики, потом все красные и т.д.

Anoha 06.07.2010 - 06:34

это график ошибок. если на заданном объекте были критические ошибки, то бар рисуется красным, если предупреждения, то желтым, если мелкие замечания, то синим. Данные для всего этого безобразия хранятся в датасете. Как можно сделать, чтобы значения по Х соответствовали своим барам

Anoha 06.07.2010 - 06:38

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

 27.08.2010 - 07:24

happy smiley Спасибо! То что нужно!!!

Анастасия 21.09.2010 - 23:25

Спасибо, помогли!winking smiley

skyman 08.05.2011 - 17:15

Японские свечи

StockPointList spl = new StockPointList();

            for (int i = 0; i < 100; i++)
			{
                StockPt pt = new StockPt( DateTime.Now.AddHours( i ).ToOADate() , 1.45 + i / 100 , 1.15 + i / 100 , 1.25 + i / 100 , 1.35 + i / 100 , 2 * i);
                spl.Add( pt );
			}
            JapaneseCandleStickItem myCurve = MyPane.AddJapaneseCandleStick( Bar.BarsByCurrencyPars [ i ].CurrencyPars.ToString() , spl );
            myCurve.Stick.IsAutoSize = true;
            myCurve.Stick.Color = Color.Blue;
            myCurve.Stick.FallingBorder.Color = Color.Blue;
            myCurve.Stick.FallingFill.Color = Color.White;

            myCurve.Stick.RisingBorder.Color = Color.Blue;
            myCurve.Stick.RisingFill.Color = Color.Blue;
            MyPane.XAxis.Type = AxisType.DateAsOrdinal;

            // pretty it up a little
            MyPane.Chart.Fill = new Fill( Color.White , Color.LightGoldenrodYellow , 45.0f );
            MyPane.Fill = new Fill( Color.White , Color.FromArgb( 220 , 220 , 255 ) , 45.0f );

            zedGraphControl2.AxisChange();
            zedGraphControl2.Invalidate();

Вот пример для работы с японскими свечами-начало такое же как у всех
, код не мой где- то нашел в инете

skyman 08.05.2011 - 17:17

Японские свечи

Прошу прощения ошибочка вышла:
StockPointList spl = new StockPointList();

            for (int i = 0; i < 100; i++)
			{
                StockPt pt = new StockPt( DateTime.Now.AddHours( i ).ToOADate() , 1.45 + i / 100 , 1.15 + i / 100 , 1.25 + i / 100 , 1.35 + i / 100 , 2 * i);
                spl.Add( pt );
			}
            JapaneseCandleStickItem myCurve = MyPane.AddJapaneseCandleStick( "EURUSD" , spl );
            myCurve.Stick.IsAutoSize = true;
            myCurve.Stick.Color = Color.Blue;
            myCurve.Stick.FallingBorder.Color = Color.Blue;
            myCurve.Stick.FallingFill.Color = Color.White;

            myCurve.Stick.RisingBorder.Color = Color.Blue;
            myCurve.Stick.RisingFill.Color = Color.Blue;
            MyPane.XAxis.Type = AxisType.DateAsOrdinal;

            // pretty it up a little
            MyPane.Chart.Fill = new Fill( Color.White , Color.LightGoldenrodYellow , 45.0f );
            MyPane.Fill = new Fill( Color.White , Color.FromArgb( 220 , 220 , 255 ) , 45.0f );

            zedGraphControl2.AxisChange();
            zedGraphControl2.Invalidate();

Иван 01.12.2015 - 19:34

Обе оси текстовые

Добрый день!

Помогите пожалуйста разобраться в следующей проблеме.
У меня есть гистограмма, столбики рисуются - все нормально.
Выглядит это так:
http://www.picshare.ru/view/6922550/

но есть одно НО!
Меня не устраивает координатная сетка по оси Y
Дело в том, что значения которые я присваиваю для отрисовки столбиков это есть некие "категории"...
например: в этом месяце должник был в категории 30, а в следующем в категории 90
То есть ось Y представляет собой набор этих самых категорий
Я пытаюсь установить для оси Y так же как и для оси X свойство "текстовая ось". Тип устанавливается но при этом столбики перестают отрисовываться.
Получаем вот такую картину
http://www.picshare.ru/view/6922551/

А мне надо, что бы при значении 30 рисовался столбик по оси Y до отметки 30 и т.д.

Вот код с которым я пытаюсь это сделать:

            // Подписи под столбиками
            string[] namesX = new string[3];
            string[] namesY = new string[4];
            // Высота столбиков
            double[] valuesX = new double[3];
            double[] valuesY = new double[4];

            namesX[0] = "first";
            namesX[1] = "second";
            namesX[2] = "third";
            valuesX[0] = 30;
            valuesX[1] = 90;
            valuesX[2] = 30;

            namesY[0] = "30";
            namesY[1] = "90";
            namesY[2] = "180";
            namesY[3] = "365";
            valuesY[0] = 30;
            valuesY[1] = 90;
            valuesY[2] = 180;
            valuesY[3] = 365;

            // Создадим кривую-гистограмму
            // Первый параметр - название кривой для легенды
            // Второй параметр - значения для оси X, т.к. у нас по этой оси будет идти текст, а функция ожидает тип параметра double[], то пока передаем null
            // Третий параметр - значения для оси Y
            // Четвертый параметр - цвет
            //BarItem curve = pane.AddBar("Изменение категории задолженности", null, valuesX, Color.Blue);
            BarItem curve = pane.AddBar("Изменение категории задолженности", null, valuesX, Color.Blue);

            curve.Bar.Fill.Type = FillType.Solid;

            // Настроим ось X так, чтобы она отображала текстовые данные
            pane.YAxis.Type = AxisType.Text;
            pane.YAxis.Scale.TextLabels = namesY;

            // Уставим для оси наши подписи
            pane.XAxis.Type = AxisType.Text;
            pane.XAxis.Scale.TextLabels = namesX;

помогите пожалуйста!


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