Шпаргалка по ZedGraph. Как устранить промежутки между данными на календарной оси
В комментариях задали вопрос: Можно ли, используя AxisType.Date, не отображать на оси времени определенные дни, месяца и др.(к примеру выходные дни из-за отсутствия данных) или задать свой календарь рабочих дней, чтобы график был без разрывов. Решение данной проблемы довольно простое, достаточно установить тип горизонтальной оси как AxisType.DateAsOrdinal.
Пусть, например, у нас есть данные для гистограммы, которые заполняются ежедневно кроме выходных. Если использовать тип оси AxisType.Date, то график будет выглядеть вот так:

Если установить тип оси как AxisType.DateAsOrdinal, то график примет вид:

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.
Проект в примере - DateOrdinal
{
public Form1 ()
{
InitializeComponent ();
DrawGraph ();
}
private void DrawGraph ()
{
// Получим панель для рисования
GraphPane pane = zedGraph.GraphPane;
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear ();
Random rnd = new Random (100);
// Начальная дата для построения гистограммы
DateTime startDate = DateTime.Now;
// Количество дней, для заполнения данных
int count = 30;
// Для построения графика даты нужно преобразовать к Double
List<double> xvalues = new List<double> ();
// Высота столбиков
List<double> yvalues = new List<double> ();
// Заполним данные
for (int i = 0; i < count; i++)
{
// Дата для очередного столбика
DateTime currentDate = startDate.AddDays (i);
// Для выходных дней столбики создавать не будем
if (currentDate.DayOfWeek != DayOfWeek.Saturday &&
currentDate.DayOfWeek != DayOfWeek.Sunday)
{
// Значения по оси X (текущая дата)
xvalues.Add (new XDate (currentDate));
// Высота столбиков
yvalues.Add (rnd.NextDouble ());
}
}
// Создадим гистограмму
BarItem bar = pane.AddBar ("", xvalues.ToArray(), yvalues.ToArray(), Color.Blue);
// !!! Для оси X установим тип AxisType.DateAsOrdinal,
// который обозначает, что отмеченные даты откладываются равномерно
pane.XAxis.Type = AxisType.DateAsOrdinal;
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
zedGraph.AxisChange ();
// Обновляем график
zedGraph.Invalidate ();
}
}
Вернуться к остальным примерам
Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.