Italian community of Lazarus and Free Pascal
Programmazione => Graphics => Topic aperto da: fr33d0m - Aprile 09, 2026, 01:48:15 pm
-
Ciao a tutti,
sto provando a rappresentare tre serie di dati in un unico TAChart su 3 LineSeries e per ognuna vorrei il proprio asse Y dedicato (LeftAxis) e con la propria scala ma un unico asse X (BottomAxis) in comune tra tutte. Sono riuscito a creare i 3 assi Y assegnandoli alle 3 serie ma non capisco come renderli indipendenti con la scala. Mi sembra di aver capito che si debano utilizzare gli Axis Tranformation ma non ho capito come, inoltre l'asse delle X non è allineato tra le 3 serie.
Qualcuno ha mai avuto l'esigenza di fare qualcosa del genere?
Grazie.
-
Uhmm ... penso che tu debba creare 2 "subaxis" aggiuntivi dell'asse Y.
Non sò però se TChart è uguale a quello di Delphi.
-
Ho provato anche in Delphi, sia con SubAxis che creando CustomAxis ma non riesco a fare quello che voglio. Proprio non riesco a capire come legare un asse ad una serie e allinearli sull'asse X (BottomAxis).
-
Devi aggiungere un CustomAxis e abbinarlo alla serie (a runtime o nell'object inspector o nello chart edit).
L'asse 2 è abbinato alla serie verde che incomincia (solo per leggibilità) a X 50
L'asse "bottom" ossia l'orrizontale è automaticamente agganciato a tutte le serie, sempre che non aggiunge anche li un custom e lo abbini alle serie che vuoi.
Tieni presente che solo nell'ultima versione si posso aggiungere quanti customaxis vuoi, prima mi pare fossero limitati.
-
Ok, finalmente in Delphi sono riuscito a raggiungere il risultato desiderato. Il problema è che mi interessava farlo anche con il componente TChart di Lazarus e non riesco a rendere indipendenti gli assi.
Quando creo altri LeftAxis sembra che rimangano legati in qualche modo al LeftAxis principale creato di default e prendano gli stessi valori di scala.
Qualche idea?
-
Succintamente, è questo che vuoi ottenere in Lazarus ?
Se si per ogni asse verticale usa la proprietà "group". Poi nelle serie definisci come in Delphi l'appartenenza agli assi.
Non settare i valori minimi / massimi degli assi perchè (probabilmente è un baco) in questo caso tutti gli assi avranno il minimo / massimo come range più largo impostato.
-
Alla fine ce l'ho fatta a risolvere.
I passi sono:
- Creazione delle 3 serie;
- Creazione di 2 LeftAxis aggiuntivi; (il primo è creato di default)
- Assegnazione degli assi alle serie (ogni serie ha il suo LeftAxis);
- Creazione di 3 oggetti AxisTransformation creando un nuovo item AutoScaleAxisTransf ciascuno;
- Assegnazione dei Transformation agli assi (ogni asse il suo Transformation);
- Ad ogni asse impostare i valori di Range.Max e Range.Min uguali ma opposti (es. 100 e -100) con i valori di scala che vogliamo visualizzare; (questo serve per allineare lo zero su tutte le serie)
- Ad ogni asse impostare Range.UseMax e Range.UseMin a "true";
Grazie a tutti.