Hoe grafieken tekenen?
Er bestaat, naast SimpleCharts, al redelijk lang een nooit-afgewerkte eigen gambas-module om grafieken te tekenen, “gb.chart”. (nb: niet in OpenSUSE 15.1 default repo (gambas 3.10.0), wel in alternatieve repo community: home:munix9 (bv Gamabas 3.15.1) en ook in 15.2.
Maar daar is weinig documentatie of voorbeeldmateriaal over te vinden. Ik heb nu een (in een oude discussie op forum.gambas.one) een voorbeelprogramma gevonden dat wel inzicht geeft:
ChartTest
- componenten: gb, gb.chart, gb.form, gb.gui, gb.image
- Projecttype: normaal
- 0 modulen, 1 klasse, 1 form, 65 regels code
- een “data” bestand met 7 lijnen van telkens twee cijfers, met komma gescheiden;
Op de Form is een DrawingArea geplaatst.
Het databestand wordt onmiddellijk in een array van strings geladen.
Chart wordt onmiddellijk aangesproken (dus geen hChart=New Chart of zo..)
De module heeft wel wat mogelijkheden:
- type grafieken: Area (perc, stacked, symbols), Bars (perc, stacked), Columns (linecombination, stacked, percent), Lines (symbols, percent, stacked), Pie (Offset1, Offset2, Rings), Plots.
- de titel kan opgegeven worden
Chart.Title.Text =
, maar geen subtitel (iets kleiner onder de titel)
- de grafiek schaalt mooi mee in de hoogte en de breedte bij het wijzigen van het venster
- de achtergrondkleur kan opgegeven worden
- de horizontale lijnen kunnen aan/af gezet worden
Chart.YAxe.ShowIntervalLines=True
- de grafiekkleuren voor de dataranges kunnen opgegeven worden
- je kan een legende zetten, met legende titel, en de kleurtjes van de grafiek, met label
- Als er te veel waarden zijn op X en Y as (bv meer dan 200) worden de waarden van de as over elkaar heen gedrukt en zijn ze niet meer leesbaar. Je kan daarom een soort schaal zetten, bv
Chart.YAxe.Step = 10
, of je kan de waarden onderdrukken mbv Chart.XAxe.Visible = False
(dus niet de X-as wordt onderdrukt maar enkel de weergave van de waarde op die as)
Opmerkingen:
- het is niet altijd duidelijk waarom iets niet werkt zoals je verwacht: begrijp je iets niet of is dat onderdeel niet klaar? De documentatie en/of de help is niet altijd volledig.
- Legende:
Legend.Position
, blijkt standaard 2 maar het is niet duidelijk wat je ermee kan doen; andere (+/- integer) waarden tonen de legende niet, ik dacht bv om ze in het vlak van de grafiek te zetten om plaats te winnen.
- Geen subtitel
- Als er veel waarden op een as van het type tekst (of datum) zijn, is het niet mogelijk om er af en toe een af te drukken, je kan ze enkel afzetten. En wat doet Autoscale T/F?
- de DrawingArea in een Form laat niet toe andere elementen op die form te zetten; bv bovenaan een knop met kleurkeuze of zo, dan valt er onderaan een stuk van de grafiek weg. Misschien zal je dus in je FMain een apart venster moeten oproepen met de grafiek alleen.
- het zou misschien handiger zijn een object te hebben ipv een module?
Voorbeeld van gebruik met iets meer data: https://sourceforge.net/projects/garlic3/files/Examples/Gambas3Charts/