Autor |
Beitrag |
KlausNeuer
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 21.01.14 12:58
Hallo an alle Forums Nutzer,
Bin neu hier im Forum und hoffe das dieses Forum mir helfen kann. Ich versuche auch zu helfen wo es geht
Zu meinem Problem.
Ich arbeite seid neustem an dem erstellen eines Chart, das mir Auswertungsergebniss darstellen soll.
Hier mal ein beispiel, dort ist auch mein erstes Problem.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var s = new Series(); s.ChartType = SeriesChartType.Area;
DateTime time = new DateTime(2014, 1, 17, 09, 30, 20, 100); s.Points.AddXY(time.ToOADate(), 1); DateTime time2 = new DateTime(2014, 1, 17, 09, 30, 30, 250); s.Points.AddXY(time2.ToOADate(), 1); DateTime time3 = new DateTime(2014, 1, 17, 09, 30, 40, 350); s.Points.AddXY(time3.ToOADate(), 1); DateTime time4 = new DateTime(2014, 1, 17, 09, 30, 50, 550); s.Points.AddXY(time4.ToOADate(), 1);
s.XValueType = ChartValueType.Time; s.XValueType = ChartValueType.DateTimeOffset; chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy:MM:dd HH:mm:ss:fff "; chart1.Series.Clear(); chart1.Series.Add(s); |
Ich habe hier mal für time und time2 etc. einfach Datumswerte eingetragen.
Später werden diese aus einer Datenbank gefüllt, aber die Struktur bleibt.
Die Zahlen werden somit einfach durch variablen ersetzt.
1. Problem
Wenn ich mir das Testweiße debug dann bekomm ich eine chart angezeigt,
bei der an der X-Achse das Datum steht (2014:01:17 09:30:20: 000)
Hier ist das problem das ich einfach nicht die Milisekunden in der Chart angezeigt bekomm.
2. Problem
Später bekomm ich die DateTime werte über eine Datenbank, dort kann es sein, dass ich ein wert an Tag 1 hab und 5 Werte an Tag 2 hab, an Tag 3 hab ich kein Wert und an Tag 4 hab ich 100 Werte.
Ich hoffe ihr versteht was ich mein
Ich hab dann ein großes problem bezüglich der skallierung, entweder gehen Zwischenwerte unter, und werden in der chart nur als linie angezeigt, weil sie sich nur im Milisecound bereich unterscheiden.
Oder manche werte sind nicht sichtbar weil sie 3 Tage entfernt von anderen liegen.
danke schonmal!
Bitte verweißt mich nicht nur an die methode etc. und die hilfe von MSDN, ich hab da schon sehr sehr lange drin gewühlt.
Moderiert von Th69: Beitragsformatierung überarbeitet.
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 21.01.14 14:38
Hallo und
ich nehme mal an, daß die Methode ToOADate() dafür verantwortlich ist, daß keine Millisekunden angezeigt werden.
Kannst ja mal testweise DateTime.FromOADate(time.ToOADate()) aufrufen, ob die Millisekunden erhalten bleiben. Und dann im nächsten Schritt mal einen (selbst zugewiesenen) double-Wert direkt dem Chart mitgeben.
Bei deinem 2. Problem bzgl. Skalierung kann ich dir aber wohl nicht weiterhelfen. Unterstützt das Chart denn keinen Zoom-Modus?
P.S: Und bitte Crossposts myCSharp.de - Forms Chart Darstellung mit DateTime in Millisekunden-Auflösung auf X-Achse entsprechend unserer Richtlinien (3.10 Crosspostings) immer angeben, danke.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Di 21.01.14 15:19
Warum nicht gleich double-Werte dem Chart übergeben und nur im Format dann festlegen, dass die Werte als Datum/Uhrzeit anzuzeigen sind?
Denn letztlich sind Datums/Zeit-Angaben auch nur Fließkommazahlen. Und wenn double nicht ausreichen sollte, dann extended nehmen. Das Gleiche gilt natürlich dann auch für die spätere Datenbank.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 21.01.14 15:47
Hallo Tranx,
dies ist hier C#, nicht Delphi - und hier gibt es keinen Datentyp 'extended' und daher ist DateTime schon das richtige 
|
|
KlausNeuer 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 21.01.14 16:14
Th69 hat folgendes geschrieben : | Hallo und
ich nehme mal an, daß die Methode ToOADate() dafür verantwortlich ist, daß keine Millisekunden angezeigt werden.
Kannst ja mal testweise DateTime.FromOADate(time.ToOADate()) aufrufen, ob die Millisekunden erhalten bleiben. Und dann im nächsten Schritt mal einen (selbst zugewiesenen) double-Wert direkt dem Chart mitgeben.
Bei deinem 2. Problem bzgl. Skalierung kann ich dir aber wohl nicht weiterhelfen. Unterstützt das Chart denn keinen Zoom-Modus?
|
Ok also das hab ich gemacht
C#-Quelltext 1: 2: 3:
| DateTime.FromOADate(time.ToOADate()); double value1 = 111.0; s.Points.AddXY(value1, 1); |
Also ich hab mir mal anzeigen lassen was in der ersten zeile steht
--> {17.01.2014 09:30:20}
da stehen die milisecounds net drin, aber wenn ich im debug mode bin und bei time auf + gehen und mir dann Milisecounds anzeige steht da schon die 111 drin.
hast du das gemeind? wie ich in zeile 2 und 3 geschrieben hab? einfach ein double wert an AddXY übergeben? bin mir unsicher ob du das gemeind hast, aber gebracht hat es nix
.
Das mit dem zoom modus hab ich schon probiert aber das hat nicht hingehauen.
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 21.01.14 16:36
Laut Doku haben die Axen einen Intervaltypen den man vielleicht mal explizit auf Millisekunden festlegen sollte.
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 21.01.14 16:38
Hallo,
ja so ähnlich meinte ich das, d.h. einen double-Wert mit Nachkommastellen allerdings (denn diese repräsentieren ja die Uhrzeit).
Wenn allerdings die Millisekunden bei time.ToOADate() schon übergeben werden, dann liegt es wohl wirklich an dem Chart-Control.
Kannst du denn mal LabelStyle.Format ändern, um zu sehen, ob dieser Formatwert überhaupt vom Chart-Control angezeigt wird (nicht, daß du an der falschen Stelle suchst)?
|
|
KlausNeuer 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 21.01.14 17:01
Ralf Jansen hat folgendes geschrieben : | Laut Doku haben die Axen einen Intervaltypen den man vielleicht mal explizit auf Millisekunden festlegen sollte. |
Das habe ich bereits gemacht in der chart eigenschaft selbst (also kein programmcode dazu) habs aber jetzt nochmal als programmcode reingemacht das man es besser sieht
C#-Quelltext 1:
| chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Milliseconds; |
hat aber nix gebracht
Th69 hat folgendes geschrieben : | Hallo,
ja so ähnlich meinte ich das, d.h. einen double-Wert mit Nachkommastellen allerdings (denn diese repräsentieren ja die Uhrzeit).
Wenn allerdings die Millisekunden bei time.ToOADate() schon übergeben werden, dann liegt es wohl wirklich an dem Chart-Control.
Kannst du denn mal LabelStyle.Format ändern, um zu sehen, ob dieser Formatwert überhaupt vom Chart-Control angezeigt wird (nicht, daß du an der falschen Stelle suchst)? |
also ich hab mal
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| DateTime time = new DateTime(2014, 1, 17, 09, 30, 20, 111); s.Points.AddXY(time.ToOADate(), 1); DateTime time2 = new DateTime(2014, 1, 17, 09, 30, 30, 222); s.Points.AddXY(time2.ToOADate(), 1); DateTime time3 = new DateTime(2014, 1, 17, 09, 30, 40, 333); s.Points.AddXY(time3.ToOADate(), 1); DateTime time4 = new DateTime(2014, 1, 17, 09, 30, 50, 444); s.Points.AddXY(time4.ToOADate(), 1);
s.XValueType = ChartValueType.Time; s.XValueType = ChartValueType.DateTimeOffset; chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss:fff "; chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Milliseconds; |
das gemacht, und da zeigt er mir auch nur 09:30:20:000 an
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 21.01.14 18:18
|
|
KlausNeuer 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 23.01.14 08:09
Also bei mir gehts leider so nicht, und wenn ich noch
C#-Quelltext 1:
| chart1.ChartAreas[0].AxisX.Interval = 1; |
drinne stehen lass und mir die Chart ausgebe bekomm ich auf der X-Achse gar nix angezeigt, als kein datum keine stunde, einfach nix.
Das ist jetzt mein aktueller code
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var s = new Series(); s.ChartType = SeriesChartType.Area; s.XValueType = ChartValueType.Time; s.XValueType = ChartValueType.DateTimeOffset; chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss:fff "; chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Milliseconds;
DateTime time = new DateTime(2014, 1, 17, 09, 30, 20, 111); s.Points.AddXY(time.ToOADate(), 1); DateTime time2 = new DateTime(2014, 1, 17, 09, 30, 30, 222); s.Points.AddXY(time2.ToOADate(), 1); DateTime time3 = new DateTime(2014, 1, 17, 09, 30, 40, 333); s.Points.AddXY(time3.ToOADate(), 1); DateTime time4 = new DateTime(2014, 1, 17, 09, 30, 50, 444); s.Points.AddXY(time4.ToOADate(), 1);
chart1.Series.Clear(); chart1.Series.Add(s); |
Und ich bekomm einfach keine Milisekunden angezeigt, ich bin am verzweifeln
edit:
Ich habe einen crosspost im Microsoft forum, hoffe aber trotzdem das mir einer von euch bei dem Problem helfen kann! da ich ein forum wie diese hier gemütlicher finde
social.msdn.microsof...forum=visualcsharpde
|
|
KlausNeuer 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 23.01.14 17:59
Hallo,
also das Problem mit den nicht angezeigten Msec ist ein skallierungsproblem das ich jetzt angehen muss
Das ist mein aktuelles problem
Jetzt hab ich nur das Folgendes Problem:
Ich hab normal eine unbekannte Anzahl an Werten, diese können statt Msec auch Sekunden bzw Tage auseinanderliegen, das weiß ich aber vorher nicht .
Wie mach ich da eine Sinnvolle skallierung das mir die Werte richtig angezeigt werden.
in diesem fall
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| DateTime time = new DateTime(2014, 1, 17, 09, 30, 30, 011); s.Points.AddXY(time.ToOADate(), 1); DateTime time11 = new DateTime(2014, 1, 17, 09, 30, 30, 111); s.Points.AddXY(time.ToOADate(), 1); DateTime time2 = new DateTime(2014, 1, 17, 09, 30, 30, 222); s.Points.AddXY(time2.ToOADate(), 1); DateTime time3 = new DateTime(2014, 1, 17, 09, 30, 30, 333); s.Points.AddXY(time3.ToOADate(), 1); DateTime time4 = new DateTime(2014, 1, 18, 09, 30, 30, 444); s.Points.AddXY(time4.ToOADate(), 1); |
zeigt mir die Chart beim ausgeben ein Punkt am 17.1 an (obwohl da mehrerer sind mit kleinen Abständen dazwischen) und dann wieder ein Punkt am 18.1.
Schön wäre wenn ich sehen würde das am 17ten mehrere Punkte liegen und der nächste dann der am 18ten ist.
Also die frage ist auch :
Was ist wenn ich 30 Werte hab, diese unterscheiden sich alle im Msec bereich, diese werte will ich auf der Chart anzeigen, was aber ja nicht geht weil Sie nicht groß genug ist, gibt es da eine möglichkeit mittels einer SCROLLBAR das Fenster weiter zu schieben=?
|
|
|