[gelöst] TAChart fixer Bereich, Autoscale ausschalten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

[gelöst] TAChart fixer Bereich, Autoscale ausschalten

Beitrag von Theozh »

eine Frage zu TACharts:
Ich dachte, die folgenden Zeilen seien dazu da, dem Plot einen fixen Bereich vorzugeben.
Wenn ich jedoch Daten plotte, die Zahlen kleiner 1e-12 enthalten, wird der Bereich nach unten angepasst/erweitert. Wie kann ich das abstellen?
Hängt das vielleicht irgendwie damit zusammen, das es ein logarithmischer Plot mit Achsentransformationen ist? Ich habe keine andere Eigenschaft gefunden, wo man das ein-/abstellen könnte.

Code: Alles auswählen

 
  Chart1.AxisList.LeftAxis.Range.Min:= 1e-12;
  Chart1.AxisList.LeftAxis.Range.UseMin:= true;
  Chart1.AxisList.LeftAxis.Range.Max:= 1;
  Chart1.AxisList.LeftAxis.Range.UseMax:= true;
 
Zuletzt geändert von Theozh am Mo 12. Aug 2013, 11:51, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 5264
Registriert: Fr 8. Apr 2011, 09:01

Re: TAChart fixer Bereich, Autoscale ausschalten

Beitrag von wp_xyz »

Ich habe das eben nachgespielt, sollte eigentlich funktionieren. Damit die Achsentransformation funktioniert, musst du der Serien den entsprechenden Achsenindex zuweisen. Kannst du ein kleines Demoprogramm, in dem der Fehler auftritt, erstellen und hier posten (nur *.pas, *.lfm, *.lpi, *.lpr, alles in ein zip packen)?

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: TAChart fixer Bereich, Autoscale ausschalten

Beitrag von Theozh »

aha, an irgendeiner fehlenden Zuweisung könnte es liegen. Mir kommt's zudem auch komisch vor, dass ich von den Werten selber den log10() nehmen muss, damit die Darstellung passt.
Im anghängten Beispiel werden mit jedem Knopfdruck Zahlen von 1 bis 1e-19 generiert. Die y-Achse geht von 1 bis 1e-12. Sobald Zahlen <1e-12 auftreten, wird die Achse angepasst, obwohl ich meine, dass ich sie fixiert habe.

ach so... hab's inzwischen gefunden so heißt das kleine Geheimnis. Dann werden die Daten korrekterweise abgeschnitten und den log10() kann ich auch weglassen
Danke wp_xyz.

Code: Alles auswählen

  PlotXY.AxisIndexY:=0;
  PlotXY.AxisIndexX:=1;
Dateianhänge
Test_TAChart_autoscale.zip
(2.73 KiB) 78-mal heruntergeladen

wp_xyz
Beiträge: 5264
Registriert: Fr 8. Apr 2011, 09:01

Re: [gelöst] TAChart fixer Bereich, Autoscale ausschalten

Beitrag von wp_xyz »

Du möchtest die Datenreihe logarithmisch plotten und berechnest dazu manuell die Logarithmen der zu plottenden Werte. Das ist nicht nötig, weil das die Series mit Hilfe der Achsentransformation selbst machen kann. Voraussetzung dazu ist, dass die Series weiß, mit welcher Achse sie verknüpft ist, da die Achsentransformation wiederum eine Eigenschaft der Achse ist, nicht der Series. Damit funktioniert auch die Einstellung des Achsenbereichs mit Hilfe der Range-Eigenschaft der Achse.

Der Vollständigkeit halber hier der richtige Code:

Code: Alles auswählen

 
  PlotXY:= TLineSeries.Create(Chart1);
  PlotXY.AxisIndexX := 1;
  PlotXY.AxisIndexY := 0;
  for i:= -10 to 10 do
  begin
    //PlotXY.AddXY(i,log10( power(10,-Random(20)) ));  // den Logarithmus bildet die Achsentransformation!
    PlotXY.AddXY(i, power(10,-Random(20)) );
  end; 
  Chart1.AddSeries(PlotXY);
  // zusätzlich muss noch noch (einmalig, z.B. im Objectinspektor) folgende Zuweiseung erfolgt sein
  Chart1.LeftAxis.Transformations := ChartAxisTransformations1;
 

Antworten