TAChart Tutorial: BarSeries/fi: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | ## Johdanto | |
| 2 | 2 | ||
| 3 | 3 |  | |
| 4 | 4 | ||
| 5 | 5 | Lazaruksessas `TAChart` kirjastolla voidaan luoda erilaisia kaavioita. Mutta verrattuna muihin kuvaajiin, pylväskuvaaja näyttää olevan vähän vaikeampi, koska siinä on olemassa monia mahdollisuuksia: | |
| 6 | 6 | ||
| 7 | 7 | - vierekkäiset pylväät | |
| 8 | 8 | - pinotut pylvät | |
| 9 | 9 | - pinotut pylvät jotka ovat normalisoitu 100% | |
| 10 | 10 | - pystypylväät | |
| 11 | 11 | - vaakapylväät | |
| 12 | 12 | ||
| 13 | 13 | Tässä opastuksessa näytetään perusidea miten luoda kaavioon useita pylväskuvaajia jotka järjestetty vierekkäisillä pylväillä. [[TAChart Tutorial: Stacked BarSeries|follow-up tutorial]] opastaa miten pylväät pinotaan päällekäin. | |
| 14 | 14 | ||
| 15 | 15 | Lisäksi esittellään myös [[TAChart documentation|TRandomChartSource]] joka on työkalu jolla saadaan kaavioon satunnaisdataa. | |
| 16 | 16 | ||
| 17 | 17 | Tarvitset Pascal:n ja Lazaruksen perustiedot. Tutustu ensin [[TAChart Tutorial: Getting started/fi|TAChart aloitusoppaaseen]] siinä saat joitakin perusvalmiuksia työskennellä TAChart-kirjaston parissa jos tämä on sinulle uusi. Suosittelemme myös tutkia [[TAChart documentation]]. | |
| 18 | 18 | ||
| 19 | 19 | ## Valmistelu | |
| 20 | 20 | ||
| 21 | 21 | ### Kaavion alustaminen | |
| 22 | 22 | ||
| 23 | 23 | Luo uusi projekti, tallenna se. Lisää `TChart` komponentti Lazaruksen komponenttipaletilta lomakkelle `Form1`, sovita se sopivan kokoiseksi lomakkeelle. | |
| 24 | 24 | ||
| 25 | 25 | ### Data kaavioon | |
| 26 | 26 | ||
| 27 | 27 | Ennen kuin jatketaan mietitäänpä mistä saadaan tiedot kaavioon. Ehkäpä taloushallinnon dataa. Suuryritysten liiketoiminnan tuloksia löytyy jossain internetissä tai jotain aivan muuta. | |
| 28 | 28 | ||
| 29 | 29 | Mennään tällä kertaa eri tavalla: miksi emme käytä vain satunnaista tietoa? Tietenkin, ne eivät merkitse mitään, mutta ne ovat yksinkertaisia ja erittäin kätevä käyttää. Erityisesti kun `TAChart` sisältää [[TAChart documentation|TRandomChartSource]] komponentin, joka tarjoaa satunnaista tietoa ja se voidaan kytkeä saumattomasti suunnitteluaokana. Tämä tarkoittaa, että voit seurata tämän opetusohjelman tarvitsematta kirjoittaa riviä koodia ja ilman tarvetta koota demo sovellus. Myöhemmin, kun ulkoasu työ on tehty, voit poistaa RandomChartSource-komponentin ja korvata se toisella ChartSource-komponentilla joka sisältää datan. | |
| 30 | 30 | ||
| 31 | 31 | Kuten pian huomataan, niin kaaviossa on kolme kuvaajaa, joista kullakin on neljä pylvästä. Jokainen kuvaaja tarvitsee oman `RandomChartSource`:n . Lisättävät RandomChartSource-komponentit löytyy "Chart" komponenttipaletilta. Se on kolmas kuvake paletilla, korostettu punaisella allaolevassa kuvakaappauksessa: | |
| 32 | 32 | ||
| 33 | 33 |  | |
| 34 | 34 | ||
| 35 | 35 | Lisää kolme RandomChartSource-komponenttia lomakkeelle - yksi per kuvaaja. Nimeä ne `RedChartSource`, `BlueChartSource`, ja `YellowChartSource` koska ne liittyvät "punaiseen", "siniseen" ja "keltaiseen" pylväskuvaajaan. | |
| 36 | 36 | ||
| 37 | 37 | Lisäksi täytyy alustaa RandomChartSource-komponentit koska ne eivät tarjoa mitään tietoja oletuksena. Halutaan neljä pylvästä per kuvaaja. Siksi asetetaan ominaisuus `PointsNumber` arvoon neljä (4). Saadaksesi akselin otsikot synkronoitua baareja `x` -akseli on vaihtelevat 1 ja 4 (tai välillä 0 ja 3, tai välillä 0 ja 39, mitä haluat - palataan akselin otsikoihin myöhemmin yksityiskohtaisemmin): `XMin = 1, XMax = 4`. Ja lopuksi meidän on myös täsmennettävä `y` -akselin aluetta, valitse `YMin = 0` ja `YMax = 100`. | |
| 38 | 38 | ||
| 39 | 39 | ## Pylväskuvaaja | |
| 40 | 40 | ||
| 41 | 41 | ### Lisää kuvaaja | |
| 42 | 42 | ||
| 43 | 43 | Nyt kun esivalmistelut on tehty voimme lisätä pylväskuvaajat kaavioon. Kaksoisklikkaa kaaviota avatakseksi "Muokkaa kuvaajia" ikkunan. Klikkaa "Lisää" ja valitse "Pylväskuvaaja" listasta. Toista kahdesti. Lopulta meillä on kolme pylväskuvaajaa kaaviossa. Niitä ei vielä näe kaaviossa koska niitä ei ole vielä liitetty tietoon. Oliopuussa komponenttimuokkaimessa kuvaajat kuitenkin näkyvät Chart solmun lapsina . | |
| 44 | 44 | ||
| 45 | 45 | Napsauta komponenttimuokkaimessa oliopuussa ensimmäistä kuvaajaa - mene omaisuuteen `Source` ja poimi `RedChartSource` luettelosta. Nyt kuvaaja tulee näkyviin kaaviossa. Jotta se olisi "punainen" mene omaisuuteen `SeriesColor` ja valitse väri `clRed`. Nimeä sarja "RedBarSeries", ja muuta sen `Title` kohtaan "punainen". Jälkimmäinen on otsikkopalkki (`Legend`), joka saadaan päälle asettamalla kaavion `Legend.Visible` arvoon `true`. | |
| 46 | 46 | ||
| 47 | 47 | Toista sama kahdelle muulle kuvaajalle vastaavasti. | |
| 48 | 48 | ||
| 49 | 49 |  | |
| 50 | 50 | ||
| 51 | 51 | Nyt kaavio näyttää pylväskuvaajia. Kuitenkin, pylväät sijaitsevat samalla kohdin `x`-akselilla, keltaiset palkit jäävät osittain muiden pylväiden taakse. Yriteenpä korjata. | |
| 52 | 52 | ||
| 53 | 53 | ### Vierekkäiset pylväät | |
| 54 | 54 | ||
| 55 | 55 | Pylväskuvaajien järjestäminen kuhunkin ryhmään (eli pylväät jotka vastaavat samaa `x` arvoa) vierekkäin. Pylväitä täytyy siirtää vaakatasossa. `TBarSeries` tarjoaa kaksi ominaisuutta tähän tarkoitukseen: | |
| 56 | 56 | ||
| 57 | 57 | - `BarWidthPercent` | |
| 58 | 58 | - `BarOffsetPercent` | |
| 59 | 59 | ||
| 60 | 60 | Molemmat numerot ilmaistaan prosenttiosuutena etäisyytenä seuraavaan pylväskuvaajaryhmään. (Joissakin kaavioissa, pylväskuvaajat eivät ole yhtä kaukana ja siksi saadaan vaihtelevia pylväsleveyksiä. Vakiovahvuuden saavuttamiseksi pitää tällaisessa tapauksessa asettaa pylväskuvaajan omaisuus `BarWidthStyle` arvoon `bwPercentMin` .) | |
| 61 | 61 | ||
| 62 | 62 | Perusajatuksena on, että pylväskuvaajaryhmien väli (100%) jaetaan pylväille ja tyhjään tilaan ennen seuraavaan ryhmää. Jos haluamme jättää väliä - sanotaanpa vaikkapa - yhden palkin leveyden verran ryhmien välillä niin 100% pitää jakaa neljällä (siis kolme pylvästä ja tyhjä väli), eli kukin pylväs ottaa leveydestä 25%. | |
| 63 | 63 | ||
| 64 | 64 | Joten mitä tapahtuu kun asetetaan `BarWidthPercent` 25%. No - ei aivan mitä halutaan: pylväät saadaan kapeammiksi, mutta ne ovat edelleen päällekkäisiä. Tietenkin tämä tapahtuu, koska ei ole muutettu `BarOffsetPercent`-parametriä. | |
| 65 | 65 | ||
| 66 | 66 | Tällä hetkellä `BarOffsetPercent` on nolla, mikä tarkoittaa, että kukin pylvään keskusta on täsmälleen samalla kohtaa. Joten esim. pitää on siirtää punaiset pylväät vasemmalle ja keltainen pylväät oikealle niin, että ne koskettavat sinisiä pylväitä, jotka jäävät keskustaan. Siirron ero on yksi pylvään leveys eli 25%. Punaisten pylväiden liikuttamiseksi vasemmalle niiden `BarOffsetPercent` on oltava negatiivinen. | |
| 67 | 67 | ||
| 68 | 68 | Yhteenvetona, asetetaan seuraavat arvot: | |
| 69 | 69 | ||
| 70 | 70 | - `RedBarSeries: BarOffsetPercent = -25, BarWidthPercent = 25` | |
| 71 | 71 | - `BlueBarSeries: BarOffsetPercent = 0, BarWidthPercent = 25` | |
| 72 | 72 | - `YellowBarSeries: BarOffsetPercent = 25, BarWidthPercent = 25` | |
| 73 | 73 | ||
| 74 | 74 |  | |
| 75 | 75 | ||
| 76 | 76 | ## Akseli | |
| 77 | 77 | ||
| 78 | 78 | ### Luokittelutekstien käyttö | |
| 79 | 79 | ||
| 80 | 80 | Seuraavaksi on käsiteltävä asia on `x`-akselin luokittelutekstien käyttö. Tavallisesti pylväsdiagrammeilla näytetään miten data on sijoittunut tiettyihin ryhmiin. Tämä usein edellyttää että palkin alla on ryhmän nimi. Mutta toistaiseksi meillä on vain numeerisia arvoja. Kokonaislukujen puolikkaat ovat tässä hankalia. | |
| 81 | 81 | ||
| 82 | 82 | Paras tapa saada oikeat tekstit on käyttää ylimääräistä ChartSource:a osoittammaan akselin arvoa, se on `TListChartSource`. Se löytyy kaaviokomponenttipaletilta, on toisena kuvakkeena (`TChart` ja `TRandomChartSource` -komponenttien välissä.) Lisää se lomakkeelle ja nimeä se `LabelsChartSource`:ksi . | |
| 83 | 83 | ||
| 84 | 84 | ListChartSourcella on sisäänrakennettu datapisteiden muokkain, jonka avulla antaa dataa suunnittelutilassa. Valitse komponenttimuokkaimessa `LabelsChartSource` ja mene omaisuuteen `DataPoints`. Klikkaa rivillä olevaa "..." painiketta. Se avaa datapisteiden muokkaimen, ja syötä siinä seuraavat tiedot: | |
| 85 | 85 | ||
| 86 | 86 |  | |
| 87 | 87 | ||
| 88 | 88 | Laitamme "X" sarakkeeseen kunkin palkkiryhmän `x` koordinaattien arvot. Voisimme nyt ohittaa "Y" sarakkeen, mutta kuten näemme myöhemmin, että siihen laitetaan samat arvot jolloin tekstit säilyvät pylväiden 90 asteen kierron jälkeenkin . Sarakkeessa "Teksti" määritetään näytettävä teksti, jotka näyttävät kunkin pylvään ryhmän. Oletetaan, että nämä tiedot ovat joitakin kausiluonteista arvoja ja joilloin halutaan käyttää lyhenteitä "Q1", "Q2", "Q3" ja "Q4" tarkoittaen vuosineljännestä. Sarake "Väri" voi jättää tyhjäksi. | |
| 89 | 89 | ||
| 90 | 90 | Aktivoida nämä pylväiden otsikot niin tämä ChartSource täytyy liittää Bottom akselin omaisuuden `Marks` alta löytyvään `Source` ominaisuuteen ja sen lisäksi on `Marks` omaisuuden `Style` ominaisuutta muutettava arvoon `smsLabel`. | |
| 91 | 91 | ||
| 92 | 92 | Voila - nyt näyttää tältä: | |
| 93 | 93 | ||
| 94 | 94 |  | |
| 95 | 95 | ||
| 96 | 96 | ### Näytetään ruudukko ryhmien välissä | |
| 97 | 97 | ||
| 98 | 98 | Pieni sivuseikka jota voidaan parantaa: kaavio olisi selkeämpää, jos akselin asteikkomerkkien ja ruudukon viivat eivät olleet keskellä pylväskuvaajaluokkien, mutta ne olisivat niiden välillä. | |
| 99 | 99 | ||
| 100 | 100 | Aluksi poistamme alimman akselin: `BottomAxis.Grid.Visible = false`. Merkit voidaan poistaa asettamalla `TickLength` ja `TickInnerLength` nollaksi. | |
| 101 | 101 | ||
| 102 | 102 | Mutta miten lisätä ristikon välillä kaavion ryhmien? Tämä voidaan tehdä luomalla "pieni" akseli bottom-akseliin. Tämä on toinen joukko ruudukot lisätä "suurten" akselilla. Mennä bottom-akselille ja klikkaa `Minors` avataksesi vastaavan editorin. Klikkaa "Lisää" ja valitse `0 - M` luettelossa. Takaisin normaaliin komponenttimuokkaimeen, aktivoi `Visible`, muuta `TickLength` arvoon 4, ja lopuksi, aseta `Intervals.Count` arvoon 1. Tarkista `Grid` asetukset - `Visible` pitäisi olla `true`. | |
| 103 | 103 | ||
| 104 | 104 | Tämä johtaa lopputulokseen. Lopullinen? Ei aivan! Vielä on hieman ärsyttävä väli pylväiden alla. Tämä on peräisin kaavion `Margins` omaisuudesta, joka säätää pylväiden ja akseleiden etäisyyttä. Aseta vain `Chart.Margins.Bottom` arvoon 0 niin väli poistuu. | |
| 105 | 105 | ||
| 106 | 106 |  | |
| 107 | 107 | ||
| 108 | 108 | ## Pylväskuvaajat vaakatasoon | |
| 109 | 109 | ||
| 110 | 110 | Tämän opastuksen lopussa muutetaan tätä projektia niin että laitetaan pylväskuvaajat vaakatasoon. Tälläistä kaaviota voidaan käyttää kun eri luokkien nimet ovat pitkiä. | |
| 111 | 111 | ||
| 112 | 112 | `TAChart`-komponenteilla ei ole erikseen omaa vaakapylväskuvaajaa, mutta pylväskuvaaja (`TBarSeries`) voidaan helposti muuttaa vaakapylväskuvaajaksi. Kuten mikä tahansa muu `TChartSeries`jälkeläinen niin sillä on ominaisuuksia `AxisIndexX` ja `AxisIndexY` osoittamaan, mikä akseli vastaa `x` ja `y` koordinaatteja. Aseta vain `AxisIndexX` on indeksi LeftAxis (yleensä 0 ) ja `AxisIndexY` kuin `BottomAxis` palkin suunnan kiertämiseksi. | |
| 113 | 113 | ||
| 114 | 114 | Ja, tietenkin, `LabelsChartSource` on liitetty `LeftAxis`:n `Marks.Source`:n tällä kertaa. Ja koko akseli on käsiteltävä sen mukaisesti. | |
| 115 | 115 | ||
| 116 | 116 | Pohjimmiltaan siinä on kaikki mitä tarvitaan luomaan pylväskaavio vaakasuuntaan. | |
| 117 | 117 | ||
| 118 | 118 |  | |
| 119 | 119 | ||
| 120 | 120 | ## Yhteenveto | |
| 121 | 121 | ||
| 122 | 122 | Vaiheet luoda vierekkäiset pylväskuvaajat: | |
| 123 | 123 | ||
| 124 | 124 | - Jokainen pylväs vaatii erillisen BarSeries. | |
| 125 | 125 | - Käytä BarSeries:n ominaisuuksia `BarWidthPercent` ja `BarOffsetPercent` järjestämään pylväät vierekkäin ilman päällekkäisyyksiä. Prosenttiosuudet viittaavat välien etäisyyttä pylväsluokan keskuksesta. | |
| 126 | 126 | - Pylväskuvaajat vaakatasoon saadaan asettamalla kuvaajan `AxisIndexX` indeksi kaavion `LeftAxis` (yleensä `0` ) ja `AxisIndexY` indeksi `BottomAxis` (yleensä `1`). | |
| 127 | 127 | ||
| 128 | 128 | ## Lähdekoodi | |
| 129 | 129 | ||
| 130 | 130 | Tämän opetusohjelma lähdekoodi on saatavilla kansiossa `components/tachart/tutorials/bar_series`. | |
| 131 | 131 | ||
| 132 | 132 | ### Project file | |
| 133 | 133 | ||
| 134 | 134 | ``` pascal | |
| 135 | 135 | program project1; | |
| 136 | 136 | ||
| 137 | 137 | {$mode objfpc}{$H+} | |
| 138 | 138 | ||
| 139 | 139 | uses | |
| 140 | 140 | {$IFDEF UNIX}{$IFDEF UseCThreads} | |
| 141 | 141 | cthreads, | |
| 142 | 142 | {$ENDIF}{$ENDIF} | |
| 143 | 143 | Interfaces, // this includes the LCL widgetset | |
| 144 | 144 | Forms, tachartlazaruspkg, Unit1 | |
| 145 | 145 | { you can add units after this }; | |
| 146 | 146 | ||
| 147 | 147 | {$R *.res} | |
| 148 | 148 | ||
| 149 | 149 | begin | |
| 150 | 150 | RequireDerivedFormResource := True; | |
| 151 | 151 | Application.Initialize; | |
| 152 | 152 | Application.CreateForm(TForm1, Form1); | |
| 153 | 153 | Application.Run; | |
| 154 | 154 | end. | |
| 155 | 155 | ``` | |
| 156 | 156 | ||
| 157 | 157 | ### Unit1.pas | |
| 158 | 158 | ||
| 159 | 159 | ``` pascal | |
| 160 | 160 | unit Unit1; | |
| 161 | 161 | ||
| 162 | 162 | {$mode objfpc}{$H+} | |
| 163 | 163 | ||
| 164 | 164 | interface | |
| 165 | 165 | ||
| 166 | 166 | uses | |
| 167 | 167 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, TAGraph, | |
| 168 | 168 | TASeries, TASources; | |
| 169 | 169 | ||
| 170 | 170 | type | |
| 171 | 171 | ||
| 172 | 172 | { TForm1 } | |
| 173 | 173 | ||
| 174 | 174 | TForm1 = class(TForm) | |
| 175 | 175 | Chart1: TChart; | |
| 176 | 176 | LabelsChartSource: TListChartSource; | |
| 177 | 177 | RedBarSeries: TBarSeries; | |
| 178 | 178 | BlueBarSeries: TBarSeries; | |
| 179 | 179 | YellowBarSeries: TBarSeries; | |
| 180 | 180 | RedChartSource: TRandomChartSource; | |
| 181 | 181 | BlueChartSource: TRandomChartSource; | |
| 182 | 182 | YellowChartSource: TRandomChartSource; | |
| 183 | 183 | private | |
| 184 | 184 | { private declarations } | |
| 185 | 185 | public | |
| 186 | 186 | { public declarations } | |
| 187 | 187 | end; | |
| 188 | 188 | ||
| 189 | 189 | var | |
| 190 | 190 | Form1: TForm1; | |
| 191 | 191 | ||
| 192 | 192 | implementation | |
| 193 | 193 | ||
| 194 | 194 | {$R *.lfm} | |
| 195 | 195 | ||
| 196 | 196 | end. | |
| 197 | 197 | ``` | |
| 198 | 198 | ||
| 199 | 199 | ### Unit1.lfm (vertical bars) | |
| 200 | 200 | ||
| 201 | - | ||
| 201 | + | ``` lfm | |
| 202 | 202 | object Form1: TForm1 | |
| 203 | 203 | Left = 381 | |
| 204 | 204 | Height = 272 | |
| 205 | 205 | Top = 444 | |
| 206 | 206 | Width = 429 | |
| 207 | 207 | Caption = 'Form1' | |
| 208 | 208 | ClientHeight = 272 | |
| 209 | 209 | ClientWidth = 429 | |
| 210 | 210 | LCLVersion = '1.3' | |
| 211 | 211 | object Chart1: TChart | |
| 212 | 212 | Left = 0 | |
| 213 | 213 | Height = 272 | |
| 214 | 214 | Top = 0 | |
| 215 | 215 | Width = 384 | |
| 216 | 216 | AxisList = < | |
| 217 | 217 | item | |
| 218 | 218 | Minors = <> | |
| 219 | 219 | Title.LabelFont.Orientation = 900 | |
| 220 | 220 | end | |
| 221 | 221 | item | |
| 222 | 222 | Grid.Visible = False | |
| 223 | 223 | TickLength = 0 | |
| 224 | 224 | Alignment = calBottom | |
| 225 | 225 | Marks.Format = '%2:s' | |
| 226 | 226 | Marks.Source = LabelsChartSource | |
| 227 | 227 | Marks.Style = smsLabel | |
| 228 | 228 | Minors = < | |
| 229 | 229 | item | |
| 230 | 230 | Intervals.Count = 1 | |
| 231 | 231 | Intervals.MinLength = 5 | |
| 232 | 232 | Intervals.Options = [aipUseCount, aipUseMinLength] | |
| 233 | 233 | TickLength = 4 | |
| 234 | 234 | end> | |
| 235 | 235 | end> | |
| 236 | 236 | Foot.Brush.Color = clBtnFace | |
| 237 | 237 | Foot.Font.Color = clBlue | |
| 238 | 238 | Legend.Visible = True | |
| 239 | 239 | Margins.Bottom = 0 | |
| 240 | 240 | Title.Brush.Color = clBtnFace | |
| 241 | 241 | Title.Font.Color = clBlue | |
| 242 | 242 | Title.Text.Strings = ( | |
| 243 | 243 | 'TAChart' | |
| 244 | 244 | ) | |
| 245 | 245 | ParentColor = False | |
| 246 | 246 | object RedBarSeries: TBarSeries | |
| 247 | 247 | Title = 'red' | |
| 248 | 248 | BarBrush.Color = clRed | |
| 249 | 249 | BarOffsetPercent = -25 | |
| 250 | 250 | BarWidthPercent = 25 | |
| 251 | 251 | Source = RedChartSource | |
| 252 | 252 | end | |
| 253 | 253 | object BlueBarSeries: TBarSeries | |
| 254 | 254 | Title = 'blue' | |
| 255 | 255 | BarBrush.Color = clBlue | |
| 256 | 256 | BarWidthPercent = 25 | |
| 257 | 257 | Source = BlueChartSource | |
| 258 | 258 | end | |
| 259 | 259 | object YellowBarSeries: TBarSeries | |
| 260 | 260 | Title = 'yellow' | |
| 261 | 261 | BarBrush.Color = clYellow | |
| 262 | 262 | BarOffsetPercent = 25 | |
| 263 | 263 | BarWidthPercent = 25 | |
| 264 | 264 | Source = YellowChartSource | |
| 265 | 265 | end | |
| 266 | 266 | end | |
| 267 | 267 | object RedChartSource: TRandomChartSource | |
| 268 | 268 | PointsNumber = 4 | |
| 269 | 269 | RandSeed = 1 | |
| 270 | 270 | XMax = 4 | |
| 271 | 271 | XMin = 1 | |
| 272 | 272 | YMax = 100 | |
| 273 | 273 | YMin = 0 | |
| 274 | 274 | left = 360 | |
| 275 | 275 | top = 72 | |
| 276 | 276 | end | |
| 277 | 277 | object BlueChartSource: TRandomChartSource | |
| 278 | 278 | PointsNumber = 4 | |
| 279 | 279 | RandSeed = 2 | |
| 280 | 280 | XMax = 4 | |
| 281 | 281 | XMin = 1 | |
| 282 | 282 | YMax = 100 | |
| 283 | 283 | YMin = 0 | |
| 284 | 284 | left = 360 | |
| 285 | 285 | top = 120 | |
| 286 | 286 | end | |
| 287 | 287 | object YellowChartSource: TRandomChartSource | |
| 288 | 288 | PointsNumber = 4 | |
| 289 | 289 | RandSeed = 3 | |
| 290 | 290 | XMax = 4 | |
| 291 | 291 | XMin = 1 | |
| 292 | 292 | YMax = 100 | |
| 293 | 293 | YMin = 0 | |
| 294 | 294 | left = 360 | |
| 295 | 295 | top = 168 | |
| 296 | 296 | end | |
| 297 | 297 | object LabelsChartSource: TListChartSource | |
| 298 | 298 | DataPoints.Strings = ( | |
| 299 | 299 | '1|1|?|Q1' | |
| 300 | 300 | '2|2|?|Q2' | |
| 301 | 301 | '3|3|?|Q3' | |
| 302 | 302 | '4|4|?|Q4' | |
| 303 | 303 | ) | |
| 304 | 304 | left = 361 | |
| 305 | 305 | top = 220 | |
| 306 | 306 | end | |
| 307 | 307 | end | |
| 308 | 308 | ``` | |
| 309 | 309 | ||
| 310 | 310 | ### Unit1.lfm (horizontal bars) | |
| 311 | 311 | ||
| 312 | - | ||
| 312 | + | ``` lfm | |
| 313 | 313 | object Form1: TForm1 | |
| 314 | 314 | Left = 381 | |
| 315 | 315 | Height = 272 | |
| 316 | 316 | Top = 444 | |
| 317 | 317 | Width = 429 | |
| 318 | 318 | Caption = 'Form1' | |
| 319 | 319 | ClientHeight = 272 | |
| 320 | 320 | ClientWidth = 429 | |
| 321 | 321 | LCLVersion = '1.3' | |
| 322 | 322 | object Chart1: TChart | |
| 323 | 323 | Left = 0 | |
| 324 | 324 | Height = 272 | |
| 325 | 325 | Top = 0 | |
| 326 | 326 | Width = 384 | |
| 327 | 327 | AxisList = < | |
| 328 | 328 | item | |
| 329 | 329 | Grid.Visible = False | |
| 330 | 330 | TickLength = 0 | |
| 331 | 331 | Marks.Format = '%2:s' | |
| 332 | 332 | Marks.Source = LabelsChartSource | |
| 333 | 333 | Marks.Style = smsLabel | |
| 334 | 334 | Minors = < | |
| 335 | 335 | item | |
| 336 | 336 | Intervals.Count = 1 | |
| 337 | 337 | Intervals.MinLength = 5 | |
| 338 | 338 | Intervals.Options = [aipUseCount, aipUseMinLength] | |
| 339 | 339 | TickLength = 4 | |
| 340 | 340 | end> | |
| 341 | 341 | Title.LabelFont.Orientation = 900 | |
| 342 | 342 | end | |
| 343 | 343 | item | |
| 344 | 344 | Alignment = calBottom | |
| 345 | 345 | Minors = <> | |
| 346 | 346 | end> | |
| 347 | 347 | Foot.Brush.Color = clBtnFace | |
| 348 | 348 | Foot.Font.Color = clBlue | |
| 349 | 349 | Legend.Visible = True | |
| 350 | 350 | Margins.Bottom = 0 | |
| 351 | 351 | Title.Brush.Color = clBtnFace | |
| 352 | 352 | Title.Font.Color = clBlue | |
| 353 | 353 | Title.Text.Strings = ( | |
| 354 | 354 | 'TAChart' | |
| 355 | 355 | ) | |
| 356 | 356 | ParentColor = False | |
| 357 | 357 | object RedBarSeries: TBarSeries | |
| 358 | 358 | Title = 'red' | |
| 359 | 359 | AxisIndexX = 0 | |
| 360 | 360 | AxisIndexY = 1 | |
| 361 | 361 | BarBrush.Color = clRed | |
| 362 | 362 | BarOffsetPercent = -25 | |
| 363 | 363 | BarWidthPercent = 25 | |
| 364 | 364 | Source = RedChartSource | |
| 365 | 365 | end | |
| 366 | 366 | object BlueBarSeries: TBarSeries | |
| 367 | 367 | Title = 'blue' | |
| 368 | 368 | AxisIndexX = 0 | |
| 369 | 369 | AxisIndexY = 1 | |
| 370 | 370 | BarBrush.Color = clBlue | |
| 371 | 371 | BarWidthPercent = 25 | |
| 372 | 372 | Source = BlueChartSource | |
| 373 | 373 | end | |
| 374 | 374 | object YellowBarSeries: TBarSeries | |
| 375 | 375 | Title = 'yellow' | |
| 376 | 376 | AxisIndexX = 0 | |
| 377 | 377 | AxisIndexY = 1 | |
| 378 | 378 | BarBrush.Color = clYellow | |
| 379 | 379 | BarOffsetPercent = 25 | |
| 380 | 380 | BarWidthPercent = 25 | |
| 381 | 381 | Source = YellowChartSource | |
| 382 | 382 | end | |
| 383 | 383 | end | |
| 384 | 384 | object RedChartSource: TRandomChartSource | |
| 385 | 385 | PointsNumber = 4 | |
| 386 | 386 | RandSeed = 1 | |
| 387 | 387 | XMax = 4 | |
| 388 | 388 | XMin = 1 | |
| 389 | 389 | YMax = 100 | |
| 390 | 390 | YMin = 0 | |
| 391 | 391 | left = 360 | |
| 392 | 392 | top = 72 | |
| 393 | 393 | end | |
| 394 | 394 | object BlueChartSource: TRandomChartSource | |
| 395 | 395 | PointsNumber = 4 | |
| 396 | 396 | RandSeed = 2 | |
| 397 | 397 | XMax = 4 | |
| 398 | 398 | XMin = 1 | |
| 399 | 399 | YMax = 100 | |
| 400 | 400 | YMin = 0 | |
| 401 | 401 | left = 360 | |
| 402 | 402 | top = 120 | |
| 403 | 403 | end | |
| 404 | 404 | object YellowChartSource: TRandomChartSource | |
| 405 | 405 | PointsNumber = 4 | |
| 406 | 406 | RandSeed = 3 | |
| 407 | 407 | XMax = 4 | |
| 408 | 408 | XMin = 1 | |
| 409 | 409 | YMax = 100 | |
| 410 | 410 | YMin = 0 | |
| 411 | 411 | left = 360 | |
| 412 | 412 | top = 168 | |
| 413 | 413 | end | |
| 414 | 414 | object LabelsChartSource: TListChartSource | |
| 415 | 415 | DataPoints.Strings = ( | |
| 416 | 416 | '1|1|?|Q1' | |
| 417 | 417 | '2|2|?|Q2' | |
| 418 | 418 | '3|3|?|Q3' | |
| 419 | 419 | '4|4|?|Q4' | |
| 420 | 420 | ) | |
| 421 | 421 | left = 361 | |
| 422 | 422 | top = 220 | |
| 423 | 423 | end | |
| 424 | 424 | end | |
| 425 | 425 | ``` | |
| 426 | 426 | ||
| 427 | 427 | --- | |
| 428 | 428 | *From the Free Pascal wiki, page "TAChart Tutorial: BarSeries/fi", as it stood on 2020-02-28 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
