2013-03-05 5 views
7

SITUATION enter image description hereZedgraph - wie Datum anpassen basierend X-Achse tics

Ich baue ein Diagramm ZedGraph des Preises (Y-Achse) gegen die Zeit (X-Achse) verwendet wird. Die Dauer der Zeit beträgt drei Jahre.

Im Moment bekomme ich X-Achsen-Etiketten von: Jan 11; 12. Januar; 13. Januar für eine Reihe von Daten, die von 3-Mar-2010 bis 2-Mar-2013 läuft.

Soweit ich sehen kann, ist dies Standardverhalten, wenn die Achse vom Typ DateTime ist.

FRAGE

Wie kann ich die Markierung X-Achse zu ändern, damit ich: 11. März; 12. März; 13. März? Und ganz allgemein, damit ich die Bezeichnungen ändern kann, die mit dem Anfangs-/Endmonat der Daten übereinstimmen.


EDIT:

Mein erster Versuch, diese Frage war ein wenig zweideutig, so werde ich nur zu klären versuchen.

Es ist nicht so, dass ich möchte, dass die Etiketten dd-MMM-yy sind - was ich will, ist in der Lage, die Positionen auf der X-Achse zu steuern, wo die Etiketten/Tics erscheinen.

, so dass für eine X-Achse, die 3-Mar-2010-2-Mar-2013 überspannte, anstelle der Etiketten immer im Januar erscheinen

  • 11. Januar [dh Januar 2011];
  • 12. Januar [das ist Januar 2012];
  • 13. Januar [dh Januar 2013)

wie in meinem Bildschirm Dump gezeigt kann ich wählen, welchen Monat das Etikett/tic erscheint in. Also für diesen Datensatz würde Ich mag Etiketten haben bei:

  • März 2010 (erscheint als Mar10)
  • März 2011 (erscheint als MAR11)
  • März 2012 (erscheint als MAR12)
  • März 2013 (erscheint als Mar13)

Ich hoffe, das ist klarer.

+0

Auch wenn Sie einen bestimmten Tag als statische Variable angeben möchten, können Sie 'DateTime day = new DateTime (2012, 1, 1);' – tmwoods

+0

verwenden Sie haben versucht, 'myPane.XAxis.Type = AxisType.DateAsOrdinal' zu setzen und ein benutzerdefiniertes Etikett verwendet? Verwenden Sie [this] (http://stackoverflow.com/questions/9951465/changing-axis-type-inzedgraph) als Referenz. Auch müssen Sie möglicherweise "Scale.Format =" MM-yy "' und sehen, ob das funktioniert. Ich habe es nie selbst ausprobiert. – tmwoods

+0

Überprüfen Sie meine Bearbeitung in meiner Antwort. Ich denke, es wird funktionieren. Sie müssen vielleicht ein bisschen damit herumspielen, aber hoffentlich wird es klappen! – tmwoods

Antwort

8

Sie müssen die x-Achse Eigenschaften

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

einzustellen, dass Sie die Daten geben würden Sie gebeten; Ich weiß, dass Sie ein Minuszeichen in die AddDays Methode setzen können, wenn Sie stattdessen von heute abzählen möchten, und Sie können Daten auch spezifisch einstellen (schauen Sie sich einfach die automatische Vervollständigung an, wenn Sie mit der Eingabe beginnen).

Hoffe, das hilft! Viel Glück!

EDIT:

Also hier ist, was ich herausfinden konnte, jene Gewohnheit zu bekommen Zecken: Sie haben TextObj Etiketten zu verwenden. Sie müssen auch von den ursprünglichen Zecken loszuwerden:

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

ich dies aus this thread modifiziert, die ich denke, die ihr ähnlich ist, außer dass es für die Y-axis ist. Es ist ein bisschen wie ein Hack und du musst jedes manuell hinzufügen. Sie müssen es nicht wirklich in einer foreach-Schleife tun, ich habe es nur in einen geschrieben, weil ich den Code aus dem anderen Beitrag kopiert habe. Ich hoffe, es funktioniert!

+0

Auch wenn Sie einen bestimmten Tag als statische Variable angeben möchten, können Sie 'DateTime Tag = neue DateTime (2012, 1, 1);' – tmwoods

+0

tmwoods: Vielen Dank für Ihre Antwort. Ich fürchte, ich habe mich nicht klar gemacht. Ich habe versucht, mich in einer Bearbeitung der Frage besser zu erklären. – glaucon

+0

tmwoods: Ich wollte sagen, ich entschuldige mich für die langsame Antwort, bin auf etwas anderes gefesselt. – glaucon

Verwandte Themen