Laden...

Große Datenmengen und ZedGraph

Erstellt von kk3003 vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.645 Views
K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren
Große Datenmengen und ZedGraph

Hallo,

ich habe hier Messdaten mit 2 bzw. 3 Achsen (Zeit, Y1, (Y2)), die ich gerne auf den Bildschirm bringen möchte. Dabei handelt es sich im Worst-Case um vielleicht 100 Millionen Datensätze einer Messreihe.

Zur Zeit arbeite ich mit ZedGraph um Daten darzustellen (Kuchendiagramm, kleine Messreihen).

Nun zu meiner Frage:

  • Ist ZedGraph für solch große Datenmenge geeignet?
  • Wo kann ich tweaken, um ZedGraph zu "zwingen" nur den aktuellen dargestellten Teil aus der Messdatei zu laden bzw. Werte für eine grobe Ansicht zu interpolieren?

Vielleicht stand jemand schon mal vor dem gleichen Problem und kennt einen Ausweg bzw. eine bessere/andere Bibliothek.

Gruß und danke für jede Antwort
kk3003

Gelöschter Account
vor 15 Jahren

der zedgraph dient nur der anzeige und 100millionen datensätze lassen sich für einen menschen nciht anzeigen. sowas kann ein mensch garnicht erfassen. du musst die daten mithilfe einer logik nach den wesentlichen informationen filtern oder auf etwas darstellbares reduzieren.

du versorgst doch an einem bestimmten punkt den graphen mit informationen, wenn es korrekt implementiert ist, dann hast du ohnehin irgendwo eine methode, die die informationen holt und für den graphen aufbereitet. dort kannst du filtern.

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo JackoLena,

das führt mich gleich zu meiner nächsten Frage: Wie kann ich aktuell dargestellen Bereichen (X-Achsenbereich) des ZedGraph abfragen?! Ohne diese Information wäre ich ja wohl aufgeschmissen....

Gruß und Danke
kk3003

Gelöschter Account
vor 15 Jahren

ich kenne jetzt den zedgraph nur äußerst schlecht daher beschreibe ich aus meinen erfahrungen mit den standardcontrols.

die x-achse kannst du doch bennenen wie du möchtest. du kannst definieren, das 0 den namen 500 hat und das der äußerste punkt den namen 1000 hat. somit hätte der user aus seiner sicht eine darstellung von 500 bis 1000. da du selbst diese werte festlegen kannst, weißt du doch zu jedem zeitpunkt, welche daten der user gerade sieht.

was anderes ist, wenn der zedgraph den virtualmode unterstützt aber das weiß ich nciht.

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo,

vielleicht habe ich falsch ausgedrückt. Um das Einlesen von Millionen von Daten zu vermeiden, wäre mir schon geholfen, den ZedGraph dahingehend zu tweaken, dass er nur die tatsächlichen anzuzeigenden Daten laden muss. (z.B. abhängig von der Zoomstufe, etc.)

Gruß und Danke
kk3003

Gelöschter Account
vor 15 Jahren

das ich das richtig verstehe: du verknüfst zedgraph direkt mit einer datei?

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo,

das ich das richtig verstehe: du verknüfst zedgraph direkt mit einer datei? Das geht ja, soweit ich weiß, nicht.

Ich lese eine Datei in ein double[]-Array und übergebe entsprechende Daten an die ZedGraph-Komponente.

Gruß
kk3003

Gelöschter Account
vor 15 Jahren

na dann weißt du doch wo du ansetzten musst.
du weißt doch was du beim graphen eingestellt hast und die zoomstufe bekommst du sicherlich in irgendeiner property (intellisence oder dukzmentation?)....

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo,

naja ok. Nachdem mein Problem nicht zu speziell ist, dachte ich, ich finde hier vielleicht konkretere Hilfe! 😁

Gruß
kk3003

Gelöschter Account
vor 15 Jahren

du meinst also, das ich für dich in die zedgraph-doku schauen soll, um dir zu sagen, welches property dir die zoomstufe verrät?

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Bitte den Thread schließen..... (wird mir zu doof.)

Gruß
kk3003

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo kk3003,

hm, so ganz nachvollziehen kann ich deine Bitte nicht. Vor seinem letzten Kommentar hat JAck30lena dir doch nach Kräften geholfen. Da muss man doch nach einer flappsigen Bemerkung vom ihm nicht gleich den Thread schließen.

Und ich denke, - in meiner eigenen Unkenntnis von Zedgraph - die Lösung liegt wirklich darin, dass du die Datensätze filterst, bevor du sie an Zedgraph übergibst.

Aber ich denke, wir sollten es schon so machen, dass wir jetzt still sind und damit das Feld für die Zedgraph-Kenner freigeben.

herbivore

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo herbivore,

vielleicht habe ich auch etwas überreagiert. Ich nehme meinen Beitrag hiermit förmlich zurück. Es soll nur nicht so aussehen, dass ich hier auf fertige Lösungen warte. Das ist absolut nicht der Fall.

Nochmal kompakt: Ist obige Themenstellung mit ZedGraph und überschaubarem Aufwand machbar. Oder gibt es bessere Bibliotheken?!

Danke und Gruß
kk3003

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

*kleiner push*

Hallo,

niemand, der mit ZedGraph und größeren Datenmengen Erfahrung hat?

Gruß
kk3003

S
506 Beiträge seit 2006
vor 15 Jahren

Nochmal kompakt: Ist obige Themenstellung mit ZedGraph und überschaubarem Aufwand machbar. Oder gibt es bessere Bibliotheken?!

Ja ist es. Der ZGraph ansicht ist echt gut programmiert. Solltest du dort ein event oder so nicht finden, so kannst du es einfach einbauen.

In den ZedGraph kannst du alle Graphen einfügen, die von der Klasse CurveItem abgeleitet sind.

Wenn du nun bestimmte Sachen machen willst, kannst du dir ganz einfach nen eigenes CurveItem erstellen, und z.B. den Graphen selbst Zeichnen.

Alle vordefinierte CurveItems , wie z.B. das LineItem, nutzen als Datenquelle die "IPointList".

Wenn du dir nun eine eigene IPointList schreibst, kannst du die filterfunktionen dort bequem einbauen, und z.B. nur jeden 1000sten punke zurückgeben (wäre ein einfacher filter). So müsstest du die Datenauch nicht noch kopieren.

Ich arbeite mit dem ZedGraph schon länger, und ich hab bis jetzt alles schaffen können.

Nun zu dem Zoom event, die oben angefragt wurden (Ich poste das hier mal aus dem Code):


/// <summary>
		/// A delegate that allows notification of zoom and pan events.
		/// </summary>
		/// <param name="sender">The source <see cref="ZedGraphControl"/> object</param>
		/// <param name="oldState">A <see cref="ZoomState"/> object that corresponds to the state of the
		/// <see cref="GraphPane"/> before the zoom or pan event.</param>
		/// <param name="newState">A <see cref="ZoomState"/> object that corresponds to the state of the
		/// <see cref="GraphPane"/> after the zoom or pan event</param>
		/// <seealso cref="ZoomEvent" />
		public delegate void ZoomEventHandler( ZedGraphControl sender, ZoomState oldState,
			ZoomState newState );

		/// <summary>
		/// Subscribe to this event to be notified when the <see cref="GraphPane"/> is zoomed or panned by the user,
		/// either via a mouse drag operation or by the context menu commands.
		/// </summary>
		[	Bindable( true ), Category( "Events" ),
			Description( "Subscribe to this event to be notified when the graph is zoomed or panned" )]
		public event ZoomEventHandler ZoomEvent;

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo stu42,

danke für Deine Antwort. 🙂 Es hilft mir schon sehr, das aus einem erfahrenen Mund zu hören. Sonst programmiert man Wochen hin und merkt am Ende, das alles umsonst war.... (bis auf den Lerneffekt).

Danke auch für den Schnipsel.

Gruß
kk3003

T
6 Beiträge seit 2007
vor 15 Jahren

Vielleicht hilft Dir auch der Artikel Use_a_FilteredPointList_to_reduce_the_number_of_points bei ZedGraph.org.

K
kk3003 Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo,

vielen Dank. Sieht sehr interessant aus und prädestiniert für meine Problematik. 👍

Gruß