Форматирование меток DateAsOrdinal xAxis в ZedGraph

Я изменил свою ось x на DateAsOrdinal, но я хотел бы улучшить формат метки. В настоящее время я обрабатываю событие XAxis.ScaleFormatEvent следующим образом:

Private Function OnXScaleFormatEvent(ByVal pane As GraphPane, ByVal axis As Axis, ByVal val As Double, ByVal index As Integer) As String
    Dim result As String = ""
    If val < priceBars.Count Then
        Dim time As Date = Date.FromOADate(priceBars(val).X)
        result = [String].Format("{0:D2}{1}{2:D2}", time.Hour, ":", time.Minute)
    End If

    Return result
End Function

Как сделать так, чтобы этикетки печатались каждые 30 минут? Или каждые 2 часа, как на изображении ниже? Я считаю, что мне все еще нужно ссылаться на столбцы x-значений, потому что мне нужно непрерывно строить несколько дней, используя только несколько часов из каждого дня, как показано на изображении; 09: 00-23: 00.

введите описание изображения здесь


person bretddog    schedule 10.02.2011    source источник


Ответы (2)


Думаю, подойдет:

chart.GraphPane.XAxis.Scale.MajorStepAuto = False
chart.GraphPane.XAxis.Scale.MajorUnit = DateUnit.Minute
chart.GraphPane.XAxis.Scale.MajorStep = 30
chart.GraphPane.XAxis.Scale.BaseTic = 0
person SpeziFish    schedule 14.02.2011
comment
Спасибо! Хотя я не могу заставить это работать .. Он дает шаг 30, но он не будет в течение всего часа / получаса (00 и 30). - person bretddog; 24.02.2011
comment
Я добавил к примеру baseTic. Таким образом, вы можете определить начальную точку. Установка на ноль должна быть вашим другом (по умолчанию undefined, поэтому baseTic - это то место, где начинаются ваши x-значения). - person SpeziFish; 24.02.2011
comment
Ах .. Теперь, наконец, я думаю, что понимаю, как это работает. Поскольку я использую ось DateAsOrdinal, только MajorStep и BaseTic будут иметь эффект и будут порядковыми значениями. Однако этого недостаточно, если вы хотите получать метку каждый час, а день заканчивается в время xx: 30. Потом на следующий день обозначим полчаса. Другим решением может быть использование MajorStep = 1, а затем обработка всех меток в событии ScaleFormat. Этот обработчик событий имеет метку-индекс, но можно ли получить доступ к списку меток, чтобы установить те, которые я не хочу отображать как .IsInvisible? Это не часть GraphObjectList, так что не знаю, какой список ..? - person bretddog; 25.02.2011
comment
Не думаю, что существует такой список. Возможное решение - вернуть пустую строку в ScaleFormatEventHandler, если вы не хотите отображать текущую метку. - person SpeziFish; 25.02.2011
comment
Да, я пробовал это. Однако в этих точках по-прежнему создается метка (с пустой строкой). Часто эти пустые ярлыки перекрываются и скрывают большинство ярлыков, которые я хочу показать. Такое поведение периодически возникает из-за точного изменения размера диаграммы. Но это, наверное, все, что касается функций. Поэтому мне может потребоваться изменить библиотеку ZedGraph, чтобы не рисовать метку, если строка метки пуста или Null. По крайней мере, мне кажется, что это потребуется. - person bretddog; 25.02.2011
comment
Хм .. Нет, похоже, это не так, как я описал. Как я пытался доработать библиотеку. Не уверен, почему ярлыки прячутся. Но выглядит это так: i55.tinypic.com/152hn44.png Иногда отображается, в зависимости от насколько я изменяю размер. - person bretddog; 25.02.2011

Исправлено форматированием каждой метки индивидуально.

person bretddog    schedule 29.07.2012