2013-03-05 12 views
7

SYTUACJA enter image description hereZedgraph - jak dostosować data oparty X-Axis tiki

buduję wykres używając ZedGraph ceny (oś Y) względem czasu (oś X). Czas trwania wynosi trzy lata.

W tej chwili otrzymuję etykiety osi X: 11 stycznia; 12 stycznia; 13 stycznia na zbiór danych od 3 marca do 2 marca 2013 r.

O ile widzę, jest to zachowanie domyślne, jeśli oś jest typu DateTime.

PYTANIE

Jak mogę zmienić oznakowanie osi X, tak aby uzyskać: Mar 11; 12 marca; 13 marca? Bardziej ogólnie, dzięki czemu mogę zmienić etykiety używane do zbiegu z początkiem/końcem miesiąca danych.


EDIT:

Moje pierwsze próby w tym pytaniu było trochę niejednoznaczne, więc jestem po prostu zamiar spróbować wyjaśnić.

Nie chodzi o to, że chcę, aby etykiety były dd-MMM-yy - to, czego chcę, to móc kontrolować lokalizacje na osi X, w których pojawiają się etykiety/tiki.

tak, że na osi X, który trwającej 3-Mar-2010 do 2-mar-2013, zamiast etykiet zawsze pojawiają się w styczniu

  • 11 stycznia [że jest styczeń 2011];
  • 12 stycznia [to jest styczeń 2012 r.];
  • 13 stycznia [że jest styczeń 2013),

jak pokazano na moim ekranie wysypisko mogę wybrać miesiąc pojawi się etykieta/tic w. Więc dla tego zestawu danych Chciałabym mieć etykiety na:

  • marca 2010 (występującego jako Mar10)
  • marca 2011 roku (występujący jako Mar11)
  • marca 2012 (występujący jako Mar12)
  • marca 2013 (pojawia się jako Mar13)

Mam nadzieję, że będzie jaśniejszy.

+0

Również jeśli chcesz powiedzieć konkretny dzień jako zmienną statyczną, możesz użyć 'DateTime day = new DateTime (2012, 1, 1);' – tmwoods

+0

Czy próbowałeś ustawić 'myPane.XAxis.Type = AxisType.DateAsOrdinal' i użyłeś niestandardowej etykiety? Użyj [this] (http://stackoverflow.com/questions/9951465/changing-axis-type-in-zedgraph) jako odniesienia. Możesz również ustawić 'Scale.Format =" MM-yy "' i sprawdzić, czy to działa. Nigdy tego nie próbowałem. – tmwoods

+0

Sprawdź moją edycję w mojej odpowiedzi. Myślę, że to zadziała; być może będziesz musiał trochę z nim poradzić, ale mam nadzieję, że to się uda! – tmwoods

Odpowiedz

8

trzeba ustawić właściwości oś X do

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)); 

która dałaby ci daty ty wymagane; Wiem, że możesz umieścić znak minus w metodzie AddDays, jeśli chcesz odliczać od dzisiaj zamiast tego, możesz też ustawić daty również (po prostu spójrz na autouzupełnianie, gdy zaczniesz je pisać).

Mam nadzieję, że to pomoże! Powodzenia!

EDIT:

Więc tutaj jest to, co mogłam wymyślić, aby te zwyczaj kleszcze: Musisz użyć TextObj etykiet. Będziesz mieć również pozbyć oryginalnych kleszczy:

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); 
} 

zmodyfikowałem to od this thread co moim zdaniem jest podobna do Ciebie, oprócz tego, że jest dla Y-axis. To trochę hack i musisz dodać każdy z nich ręcznie. Nie musisz tego robić w pętli foreach, po prostu umieszczam ją w jednym, ponieważ tak skopiowałem kod z drugiego postu. Mam nadzieję, że to działa!

+0

Również jeśli chcesz powiedzieć konkretny dzień jako zmienną statyczną, możesz użyć 'DateTime day = new DateTime (2012, 1, 1);' – tmwoods

+0

tmwoods: Dziękuję za odpowiedź. Obawiam się, że nie wyjaśniłem się. Próbowałem wyjaśnić się lepiej w edycji tego pytania. – glaucon

+0

tmwoods: Chciałem powiedzieć, że przepraszam za powolną reakcję, ale związałem się z czymś innym. – glaucon