AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TChart Raster individuell anpassen

Ein Thema von Friday · begonnen am 5. Apr 2017 · letzter Beitrag vom 10. Apr 2017
Antwort Antwort
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#1

TChart Raster individuell anpassen

  Alt 5. Apr 2017, 12:03
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TChart Raster individuell anpassen

  Alt 5. Apr 2017, 16:29
Der Chart hat ein OnGetAxisLabel -Event. Das kannst du füllen.
  Mit Zitat antworten Zitat
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TChart Raster individuell anpassen

  Alt 6. Apr 2017, 13:21
Danke, aber was hilft mir dieses Event? Selbst zeichnen müsste ich das Raster ja dann doch, warum dann nicht im OnAfterDraw Event?
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TChart Raster individuell anpassen

  Alt 6. Apr 2017, 17:37
Sorry, ich habe nicht ordentlich gelesen und dachte du wolltest nur die Achsenbeschriftung, nicht die tatsächlichen Positionen der Achsenmarkierungen anpassen.

Man scheint das einmal mit dem OnGetNextAxisLabel -Event machen zu können, ich durchschaue das aber ehrlich gesagt selbst nicht so wirklich.

Die andere Möglichkeit wäre, einfach alle Items deiner Achse zu nehmen die größer als dein Schwellwert sind und die weiter nach rechts zu rücken:

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;
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TChart Raster individuell anpassen

  Alt 8. Apr 2017, 21:00
danke schöner Günther, das funktioniert wunderbar
  Mit Zitat antworten Zitat
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TChart Raster individuell anpassen

  Alt 10. Apr 2017, 19:31
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?
Miniaturansicht angehängter Grafiken
minorticks.png  
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TChart Raster individuell anpassen

  Alt 10. Apr 2017, 19:39
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...
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#8

AW: TChart Raster individuell anpassen

  Alt 10. Apr 2017, 20:19
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
  Mit Zitat antworten Zitat
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TChart Raster individuell anpassen

  Alt 10. Apr 2017, 20:38
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 OnAfterDraw Event Ticks "von Hand" zeichnen.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz