![]() |
TChart Raster individuell anpassen
Hallo,
bei einem TChart (Standard von XE3) habe ich ein Raster für die X-Achsen-Werte 1, 2, 3, 4 etc. Nun möchte ich ab einem bestimmten Wert das Raster auf z.B. <x>.2 ändern: Also 1, 2, 3, 4, 5.2, 6.2, 7.2 etc. Ist sowas möchlich und wenn ja wie? Das einzige was mir momentan einfällt, ist das Raster komplett zu deaktivieren und alles manuell im AfterDraw zu zeichnen. Schöner wäre es natürlich die Funktionalität der Komponente in Anspruch zu nehmen. danke |
AW: TChart Raster individuell anpassen
Der Chart hat ein
Delphi-Quellcode:
-Event. Das kannst du füllen.
OnGetAxisLabel
|
AW: TChart Raster individuell anpassen
Danke, aber was hilft mir dieses Event? Selbst zeichnen müsste ich das Raster ja dann doch, warum dann nicht im
Delphi-Quellcode:
Event?
OnAfterDraw
Sprich was habe ich für Vorteile mit dem OnGetAxisLabel Event? Ich hatte ja gehofft dass TChart das zeichnen des Rasters weiterhin übernehmen kann und ich nur eine Verschiebung des Rasters ab einerm gewissen X-Achsen-Wert definiere. |
AW: TChart Raster individuell anpassen
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, ich habe nicht ordentlich gelesen und dachte du wolltest nur die Achsenbeschriftung, nicht die tatsächlichen Positionen der Achsenmarkierungen anpassen. :oops:
Man scheint das einmal mit dem
Delphi-Quellcode:
-Event machen zu können, ich durchschaue das aber ehrlich gesagt selbst nicht so wirklich.
OnGetNextAxisLabel
Die andere Möglichkeit wäre, einfach alle
Delphi-Quellcode:
deiner Achse zu nehmen die größer als dein Schwellwert sind und die weiter nach rechts zu rücken:
Items
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const shiftAfterPosition = 4.0; shiftByValue = 0.2; var axis: TChartAxis; itemIndex: Integer; itemValue: Double; begin axis := Chart1.Axes.Bottom; for itemIndex := Pred(axis.Items.Count) downto 0 do if (axis.Items[itemIndex].Value > shiftAfterPosition) then begin itemValue := axis.Items[itemIndex].Value; axis.Items.Remove( axis.Items[itemIndex] ); itemValue := itemValue + shiftByValue; axis.Items.Add( itemValue, axis.LabelValue(itemValue) ); end; end; |
AW: TChart Raster individuell anpassen
danke schöner Günther, das funktioniert wunderbar :thumb:
|
AW: TChart Raster individuell anpassen
Liste der Anhänge anzeigen (Anzahl: 1)
nun habe ich doch noch eine Folge-Frage: Durch das Verschieben des Rasters habe ich an einer Stelle (bzw. sogar an zwei Stellen wegen eines Zusatz-Axen-Item) sehr eng aufeinanderfolgende Raster und damit noch viel eng aufeinanderfolgendere Minor-Ticks. Kann ich diese nicht für einen (bzw. 2) Raster-Schritt einzeln deaktivieren?
|
AW: TChart Raster individuell anpassen
Spontan: Nicht dass ich wüsste.
Mir fehlt ehrlich gesagt aber auch völlig die konkrete Vorstellung was du versuchst darzustellen. Vielleicht gibt es eine bessere Möglichkeit als die Achsen so durch den Wolf zu drehen... |
AW: TChart Raster individuell anpassen
wenn du erklären würdest, ob es dir neben den (definierten) Werten auch um eine lineare Achse geht, oder du wie bei log. Achsen auch mit unterschiedlichen Wertedelta je geometrischer Einheit leben kannst...
Ich löse d()ein Abbildungs-Problem(zwar meist mit TMS Chart, aber habe auch eine TChartPro Variante) mit voll benutzerdefinierter Scalenpunkt-Bestimmung, also sowas wie "hScalePoint:=GetHScalePointFromValue(xValue)" und "vScalePoint:=GetVScalePointFromValue(yValue)" ... und beim "OnGetText" der Scalen, dann rückwärts "hViewValue:=GetHViewValueFromPoint(hScalePoin t)" und "vViewValue:=GetVViewValueFromPoint(vScalePoin t)". Damit bekomme ich universell jeden beliebigen Raster(Scalen)Wert mit beliebigen korrespondierenden Realwerten hin. Ich verwende die für log, semi log und doppel log scalierte Charts, was per Default ohne etwas Handarbeit so kein Charttool kann(Y teilweise, aber keines kann z.B. quasi mathematisch reliniarisiert doppel log auf X und Y). -> such dir Beispiele für Charts mit log. X-Achsen... da siehst du wie man eigendefiniert beliebige "optische/geometrische" Raster auf beliebige Wertebereiche vorwärts wie Rückwärts abbilden kann. Mathematisch sind log. Scalen zu berechnen, man könnte aber auch per Tabellen/Ranges manuell kummuliert abbilden... deiner Fantasie sind keine Grenzen gesetzt:) |
AW: TChart Raster individuell anpassen
die Achse ist an sich linear (Weg in mm), soll aber einen Umkehrpunkt haben und ab da wieder zurück auf 0 gehn. Wo dieser Umkehrpunkt genau ist, hängt von der Messung ab. In dem Beispielbild von meinem letzten Post ist der Umkehrpunkt bei 27,107 mm.
Über die Sinnhaftigkeit den gleichen Weg in umgekehrter Richtung rechts dran zu hängen statt die Messungen wieder nach links laufen zu lassen, kann man streiten. Beides hat sein für und wieder, was für meine Lösung spricht ist eine bessere Übersicht wenn viele Messungen angezeigt werden und auch noch stark streuen, da man sonst die Messungen der beiden Richtungen nicht mehr auseinander halten könnte. Ich werde wohl dazu über gehen die Minor Ticks einfach erstmal weg lassen und evtl. bei Bedarf im
Delphi-Quellcode:
Event Ticks "von Hand" zeichnen.
OnAfterDraw
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz