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

Если вас не устраивает формат, в котором ZedGraph отображает метки по осям, то вы можете изменить этот формат. В простейшем случае это можно сделать, используя свойство Scale.Format.

В приведенном ниже примере по оси X мы устанавливаем формат календарной оси, а по оси Y делаем так, чтобы отображались с фиксированными тремя знаками после запятой. При этом формат задается с помощью строк форматирования.

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

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

public partial class Form1 : Form
{
    public Form1 ()
    {
        InitializeComponent ();

        DrawGraph ();
    }

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

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

        Random rnd = new Random (100);

        // Даты, которым будут соответствовать столбики
        XDate[] dates = new XDate[] { new XDate (2011, 02, 25), new XDate (2011, 02, 26),
            new XDate (2011, 02, 27), new XDate (2011, 03, 01), new XDate (2011, 03, 02),
            new XDate (2011, 03, 04), new XDate (2011, 03, 06)};

        // Для построения графика даты нужно преобразовать к Double
        double[] xvalues = new double[dates.Length];

        // Высота столбиков
        double[] yvalues = new double[dates.Length];

        // Заполним данные
        for (int i = 0; i < dates.Length; i++)
        {
            // Значения по оси X
            xvalues[i] = dates[i];

            // Высота столбиков
            yvalues[i] = rnd.NextDouble ();
        }

        // Создадим кривую-гистограмму
        BarItem curve = pane.AddBar ("", xvalues, yvalues, Color.Blue);

        // Для оси X установим календарный тип
        pane.XAxis.Type = AxisType.Date;

        // !!! Установим формат для календарной оси
        // http://msdn.microsoft.com/ru-ru/library/system.globalization.datetimeformatinfo.aspx
        pane.XAxis.Scale.Format = "dd.MM.yyyy";

        // !!! Установим формат для числовой оси
        // http://msdn.microsoft.com/ru-ru/library/system.globalization.numberformatinfo.aspx
        pane.YAxis.Scale.Format = "F3";

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

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

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

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

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



Антон 15.11.2017 - 18:02

Скажите, пожалуйста, почему при типе оси Х AxisType.DateAsOrdinal не строится гистограмма по одной точке?
Т.е. имеется пара координат (X;Y). Вот таким способом я их ввожу:

foreach (KeyValuePair<long, DateTime> md in myDictionary)
{
    xvalues.Add(new Date(md.Value.Date));
    yvalues.Add(Convert.ToDouble(md.Key));
}

BarItem curve = pane.AddBar("", xvalues.ToArray(), yvalues.ToArray(), Color.Blue);
curve.Bar.Fill.Color = Color.YellowGreen;
curve.Bar.Fill.Type = FillType.Solid;
pane.XAxis.Scale.Format = "dd.MM.yyyy";
pane.XAxis.Type = AxisType.DateAsOrdinal;

И после строчек:

zedGraph.AxisChange();
zedGraph.Invalidate();

программа зависает. Но если точки две, то график рисуется. Если я ставлю тип просто Date, то при каждом вызове метода DrawGraph() гистограмма рисуется с разными метками и смещается относительно предыдущего раза вплоть до того, что просто "улетает" влево до самого края

Антон 15.11.2017 - 18:09

И еще подскажите, пожалуйста, как сделать так, чтобы отображались все подписи к осям, а не через одну?
Вот пример


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