2013-03-05 5 views
7

СИТУАЦИЯ enter image description hereZedGraph - как настроить дату на основе X-Axis тиков

Я строю диаграмму, используя ZedGraph цены (Y ось) от времени (ось X). Продолжительность времени - три года.

На данный момент я получаю метки оси X: 11 января; 12 января; 13 января для набора данных, который работает с 3 марта 2010 года по 2 марта 2013 года.

Насколько я вижу, это поведение по умолчанию, если ось имеет тип DateTime.

ВОПРОС

Как изменить маркировку оси X, так что я получаю: Мар 11; 12 марта; 13 марта? И в более общем плане, чтобы я мог менять метки, используемые для совпадения с начальным/конечным месяцем данных.


EDIT:

Моя первая попытка в этом вопросе был немного неоднозначным, так что я просто хочу, чтобы попытаться прояснить.

Это не то, что я хочу, чтобы метки были dd-MMM-yy. Я хочу, чтобы я мог управлять местоположениями на оси X, где появляются метки/тики.

Так что для X-оси, натянутой 3-Mar-2010 2-Mar-2013, вместо этикетки всегда появляется в январе

  • 11 января [то есть январь 2011];
  • 12 января [это январь 2012 года];
  • 13 января [то есть январь 2013)

, как показано на моем экране отвала я могу выбрать, какой месяц появляется метка/крестики в. Таким образом, для этого набора данных я хотел бы иметь ярлыки на:

  • марта 2010 года (появляющейся в Mar10)
  • марта 2011 (появляясь как Mar11)
  • марта 2012 (появляясь как Mar12)
  • марта 2013 (отображается как Mar13)

Надеюсь, что это яснее.

+0

Также, если вы хотите указать определенный день как статическую переменную, вы можете использовать 'DateTime day = new DateTime (2012, 1, 1);' – tmwoods

+0

Вы пытались установить 'myPane.XAxis.Type = AxisType.DateAsOrdinal' и использовал пользовательский ярлык? Используйте [this] (http://stackoverflow.com/questions/9951465/changing-axis-type-in-zedgraph) в качестве ссылки. Также вам может потребоваться установить «Scale.Format =« MM-yy »» и посмотреть, работает ли это. Я никогда не пробовал это сам. – tmwoods

+0

Проверьте мое изменение в моем ответе. Я думаю, что это сработает; вам, возможно, придется немного поиграть с ним, но, надеюсь, это сработает! – tmwoods

ответ

8

Вы должны установить свойство х-ось для

myPane.XAxis.Title.Text = "Date"; 
myPane.XAxis.Type = AxisType.Date; 
myPane.XAxis.Scale.Format = "dd-MMM-yy"; 
myPane.XAxis.Scale.MajorUnit = DateUnit.Day; 
myPane.XAxis.Scale.MajorStep = 1; 
myPane.XAxis.Scale.Min = new XDate(DateTime.Now.AddDays(8)); 
myPane.XAxis.Scale.Max = new XDate(DateTime.Now.AddDays(11)); 

Это дало бы вам даты, которые вы запросили; Я знаю, что вы можете поместить знак минус в методе AddDays, если вы хотите сегодня обращать внимание на это, и вы можете устанавливать даты специально (просто посмотрите на автозаполнение, когда вы начнете вводить его).

Надеюсь, это поможет! Удачи!

EDIT:

Так вот, что я мог понять, чтобы получить эти пользовательские клещей: Вы должны использовать TextObj этикетки. Кроме того, вы должны избавиться от оригинальных клещи:

pane1.MasterPane[0].XAxis.Scale.IsVisible = false; 
pane1.MasterPane[0].XAxis.MajorTic.IsAllTics = false; 

foreach (double val in x_values) 
{ 
    TextObj text = new TextObj(val.ToString(), pane1.MasterPane[0].YAxis.Scale.Min, val); 
    text.Location.AlignH = AlignH.Right; 
    text.FontSpec.Border.IsVisible = false; 
    text.FontSpec.Fill.IsVisible = false; 
    pane1.MasterPane[0].GraphObjList.Add("Mar10"); 

    LineObj line = new LineObj(pane1.MasterPane[0].YAxis.Scale.Min, val, pane1.MasterPane[0].YAxis.Scale.Max, val); 
    line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
    line.Line.Width = 1f; 
    pane1.MasterPane[0].GraphObjList.Add(line); 
} 

Я изменил это от this thread который я думаю, похоже на ваш, за исключением того, что это за Y-axis. Это немного взломать, и вам придется добавить каждый из них вручную. Вам не обязательно делать это в цикле foreach, я просто помещаю его в один, потому что я копировал код из другого сообщения. Надеюсь это работает!

+0

Также, если вы хотите сказать определенный день как статическую переменную, вы можете использовать 'DateTime day = new DateTime (2012, 1, 1);' – tmwoods

+0

tmwoods: Спасибо за ваш ответ. Боюсь, я не понял себя. Я попытался объяснить себя лучше в редактировании вопроса. – glaucon

+0

tmwoods: Я хотел сказать, что прошу прощения за медленный ответ, связанный с чем-то другим. – glaucon

Смежные вопросы