Sign in Join
Wiki copytemporary

TAChart Tutorial: Stacked BarSeries/fi: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TAChart Tutorial: Stacked BarSeries/fi

OldNewLine
1+## Johdanto
2+
3+![](/wiki-images/7/7e/StackedBarSeries_Final.png)
4+
5+[[TAChart Tutorial: BarSeries/fi|Pylväskuvaajan opetusohjelmassa]] näytettiin, miten luodaan kaavio jossa on vierekkäiset pylväät. Pinotut pylväät ovat toinen suosittu muunnos pylväskaaviosta jossa ryhmitellyt tiedot pinotaan toistensa päälle. Tällä tavoin yksittäiset maksut ja niiden summat voidaan osoittaa samassa kaaviossa. On myös muunnos, jossa kaikkien pylväiden korkeudet normalisoidaan 100%:n (samaan korkeuteen) tämä korostaa suhteellista osuutta [1](http://blog.visual.ly/how-groups-stack-up-when-to-use-grouped-vs-stacked-column-charts/) .
6+
7+Tässä opetusohjelmassa sovelletaan tätä tekniikkaa uuden sukupolven uusiutuvien energialähteiden edistymistä Saksassa vuosien 1990 ja 2012 välillä. Tiedot ovat peräisin [wikipediasta](http://en.wikipedia.org/wiki/Renewable_energy_in_Germany) ja kattavat vesivoiman, tuulivoiman, biomassan, aurinkosähkön ja maalämpöenergian.
8+
9+Pylväskuvaajan [[TAChart documentation|TBarSeries]] lisäksi tässä sivutaan myös [[TAChart documentation|TRandomChartSource]], [[TAChart documentation|TCalculatedChartSource]] ja `TChartStyles` komponentteja.
10+
11+Kuten tavallista, tässä oppaassa oletetaan että tiedetään jo perustiedot Lazaruksesta, Object Pascal ohjelmointikielestä ja ja keskeiset käsitteet TAChart-komponentista jotta voidaan seurata opetusohjelmaa. Jos ei ole koskaan työskennellyt pylväskuvaajien parissa olisi hyvä tarkastella siihen liittyvän opetusohjelma joka selittää [[TAChart Tutorial: BarSeries/fi|vierekkäisten pylväskuvaajien]] käyttöä. Suosittelemme myös [[TAChart documentation|TAChart dokumentaation]] tutkimista.
12+
13+## Kaavion suunnittelu satunnaisella datalla
14+
15+### Esivalmistelu
16+
17+Luo uusi projekti. Lisää `TAChart` komponentti ja aseta sen align arvoon `alClient` jolloin se täyttää lomakkeen kokonaan. Ehkä lomakkeen kokoa pitäisi lisätä hieman, mutta tämä voidaan tehdä myöhemmin, kun nähdään datat.
18+
19+Ennen "todellisia tietoja" järjestään ja muotoillaan kaavio sopivaksi. Komponenttimuokkaimella saadaan nopeasti vastaus tehdyistä muutoksista. Nopeana datan lähteenä voidaan käyttää [[TAChart documentation|TRandomChartSource]]-komponenttia. TRandomChartSource vain tuottaa satunnaisia ??tietoja, mutta on erinomainen apulainen optimoida kaavion ulkonäköa ilman että kääntää projektin uudestaan ??ja uudestaan. Tietenkin lopussa, poistamme TRandomChartSource:n ja korvata sen oikealla datalla.
20+
21+Joten, aloitetaan: Lisätään `TBarSeries` (pylväskuvaaja) ja `TRandomChartSource` lomakkeelle ja aseta linkki RandomChartSource pylväskuvaajan `Source` ominaisuuteen. (Jos tarvitset lisätietoja on katso [[TAChart Tutorial: BarSeries/fi|pylväskuvaajan]] opetusohjelmaa ). Valitaan RandomChartSource ja asetetaan `XMin` 1990 ja `XMax` 2012 (joka on alkuperäisten tietojen väli [wikipedian artikkelissa](http://en.wikipedia.org/wiki/Renewable_energy_in_Germany) ). Tämä väli on 23 vuotta, niin asetetaan `PointsNumber` arvoon 23 jotta saadaan pylväs vuosittain. Lopuksi asetetaan YMax on 1 (tai johonkin muuhun arvoon). Nyt pylväskuvaaja ponnahtaa kaavion:
22+
23+![](/wiki-images/e/e4/StackedBarSeries_Step1.png)
24+
25+### Useita y:n arvoja
26+
27+Jos on lukenut toisen [[TAChart Tutorial: BarSeries/fi|pylväskuvaajan opetusohjelman]] voi yllättyä nyt: Siinä opetusohjelmassa käytettiin yhtä kuvaajaa kullekin ryhmälle. Kun lopullinen uusiutuvan energian kaavioon tulee olemaan useita erilaisia pylväitä, yksi kutakin energian lajia. Joten, eikö pitäisi lisätä enemmän kuvaajia? Ei. Tarvitaan vain yksi koska ei voida seurata vierekkäisten pylväskuvaajien strategiaa täällä. Tämä johtuu siitä, `TAChart` ei voi pinota eri kuvaajien pylväitä toistensa päälle. Kukin pylväs on peräisin yhteisestä "nollatasosta" ylös (tai alas) data-arvo - ei ole tapaa siirtää pylväs alkamaan edellisen pylvään päältä.
28+
29+Mitä tehdä?
30+
31+Pinotussa pylväskuvaajalla, `TAChart` tarjoaa erityinen käsite useita y: n arvoja per kuvaajan datapistettä kohti. Jos tutkii käännösyksikön `TACustomSource` lähdekoodia niin löytyy tietue
32+
33+``` pascal
34+type
35+ TChartDataItem = packed record
36+ public
37+ X, Y: Double;
38+ Color: TChartColor;
39+ Text: String;
40+ YList: TDoubleDynArray;
41+ ...
42+ end;
43+```
44+
45+Tämä on sisäinen rakenne jolla esitetään kuvaajan arvot. Tavanomaisten `x` ja `y` -koordinaattien lisäksi, jotka tiedetään jo muista kaaviotyypeistä ja opetusohjelmista, siellä on myös datakenttä `YList` johon varaudutaan varastoimaan ylimääräisiä y-arvoja. ChartSource:lla on ominaisuus `YCount` jossa määritellään taulukon `YList` pituus - valitse RandomChartSource ja vilkaise sitä komponenttimuokkaimessa. Mutta pitää tietää, että `YCount` sisältää myös vakio y:n arvon, `YList` taulukon pituus on muiden y: n arvojen osalta siis `YCount-1` .
46+
47+Lopullinen kaavio sisältää viisi saraketyypppä ( "vesivoimaa", "tuulivoima", "biomassa", "aurinkosähkö" ja "maalämpö"). Siksi anna `YCount` varten arvo `5`. Tämä pinoaa viisi pylvästä yhteen.
48+
49+![](/wiki-images/4/46/StackedBarSeries_Step2.png)
50+
51+### ChartStyles:n käyttö
52+
53+Valitettavasti kaikki pylvään osapalkit ovat samanvärisiä. Miten voidaan muuttaa väriä jokaisella tasolla?
54+
55+Komponenttipaletilla löytyy komponentti tähän: **TChartStyles**. `TChartStyle` on komponentti, joka mahdollistaa muokata kunkin pylväskuvaajan ulkoasua (eli "tyyliä") .
56+
57+Mennään komponenttipaletille, etsitään `TChartStyle` -komponentti joka on (todennäköisesti) 9. kuvake (sellainen kuvake jossa värillisten palkkien/pylväiden edessä on pensseli tai harja) ja lisäätään kyseinen komponentti lomakkeelle.
58+
59+![](/wiki-images/6/6c/ChartStyles.png)
60+
61+Ensin täytyy yhdistää TBarSeries ja TChartStyles komponentit. Kuvaajassa (TBarSeries) on tätä vastaava ominaisuus `Styles` tähän tarkoitukseen.
62+
63+Valitaan sitten komponentti (TChartStyles) ja mennään sen Styles omaisuuteen komponenttimuokkaimella. Klikkaa "..." kolme pistettä painiketta joka avaa ChartStyles editorin. Tässä voidaan lisätä tyyli kunkin ryhmän palkkeihin klikkaamalla "+" -painiketta viisi kertaa. Vaihtoehtoisesti voit klikata hiirellä `ChartStyles1` puun "Styles" solmun kohtaa ja valita "Lisää kohde".
64+
65+![](/wiki-images/c/c5/ChartStylesEditor.png) ![](/wiki-images/a/a8/ChartStylesEditor_Properties.png)
66+
67+Komponenttimuokkaimen puussa ChartStyleList:n alta voidaan valita kunkin tyyli ja nähdä tyylin ominaisuudet komponenttimuokkaimessa. `TChartStyle` indeksin 0 kuuluu alimmaisen palkille, indeksi 1 kuuluu seuraavalle palkille jne. Palkin värin muuttaminen onnistuu muuttamalla tyylin `Brush.Color` väriä. Kaavio välittömästi päivittää ja näyttää vastaavan palkin uudella värillä. Toista tämä muissakin tyyleissä. Tutustumalla `TChartStyle` muihin ominaisuuksiin oppii, mitä muuta sillä voidaan tehdä.
68+
69+### Näytetään ChartStyles otsikkopalkissa
70+
71+Käyttämällä `ChartStyle` ominaisuutta `Text` voit määrittää näytettävä teksti otsikkopalkissa, kullekin palkin tasolle pylväässä. Kirjoita kunkin tyylin `Text` kohtaan vuorotellen "Vesivoima", "tuulivoima", "Biomassa", "Aurinkosähkö" ja "maalämpö" , alkaen indeksistä nolla.
72+
73+Aikaisemmin opitusta jo tiedetään että otsikkopalkki näytetään kun kaavion `Legend.Visible` ominaisuuden arvona on `true`. Se on oletusarvoisesti arvossa `false`. Se kuitenkin näyttää vain yhden merkinnän: punainen ruutu vastaa pylväskuvaajan käyttöä ilman `ChartStyles`. Tämä korjataan valitsemalla BarSeries ja avataan `Legend` solmu komponenttimuokkaimessa. Ominaisuus `Legend.Multiplicity` on edelleen arvossa `lmSingle` joka tuottaa vain yhden kohteen per kuvaaja. Muuta sen sijaan arvoon `lmStyle`. Tämä on oikea asetus, kun kuvaaja käyttää tyylejä. Nyt kaavio lukee kunkin tyylin `Text` arvon ja lisää ne otsikkopalkkiin.
74+
75+![](/wiki-images/9/97/StackedBarSeries_Step3.png)
76+
77+### Normalisoidaan pinotut pylväät 100%
78+
79+Kehityksen suhteellisen osuuden korostamiseksi pylväsryhmät voidaan pinotuissa pylväskaaviossa normalisoida 100%, eli kukin pylvään palkin arvo korvataan sen prosentuaalinen osuudella pinokorkeudessa.
80+
81+`TAChart` voi tehdä tämän kun hieman muutetaan nykyistä ohjelmaa. Keskeinen asia on tässä käyttää `TCalculatedChartSource`-komponenttia joka poimii tiedot, jotka liittyvät käytössä olevaan chartsource:n ja laskee suhteellisen osuuden.
82+
83+Lisää `TCalculatedChartSource` lomakkeelle. Aseta sen ominaisuus `Origin` osoittamaan RandomChartSource:a. Tämä tarkoittaa, että CalculatedChartSource tuottaa laskelmien tietojen perusteella tietoja kaavioon. On tärkeää, että jättää `AccumulationMethod` sen oletukseen, `camNone` , mikä tarkoittaa sitä, että lähtötiedot johdetaan ulostuloon muuttumattomana. Muut vaihtoehdot yhdistäisi lähtötietoihin arvot uudet arvot: `camAverage`, esimerkiksi aiheuttaisi keskiarvon laskemisen datapisteiden sisällä `AccumulationRange`. Mutta miten saamme prosenttilaskun jos `camNone` ei muuta mitään? Yksinkertaisesti sillä on `Percentage` ominaisuus! Normalisoituminen levitetään laskelmien jälkeen. Aseta `Percentage` arvoon `true` .
84+
85+Kaavion muutosta ei nähdä vielä, koska kuvaaja vielä saa sen tiedot RandomChartSource:sta. Mennään BarSeries ja valitaan `Source` ominaisuuteen CalculatedChartSource.
86+
87+Nyt näyttää tältä!
88+
89+![](/wiki-images/8/8b/StackedBarSeries_Percentage.png)
90+
91+## Näytetään todellisia tietoja
92+
93+Nyt kun kaavio on käytännössä lähes viimeistelty niin on aika poistaa satunnainen data ja korvata se "todellisilla arvoilla". Kuten johdannossa todettiin, haluamme näyttää uusiutuvan energian kehittymistä eri vuosina. Tiedot löytyvät [wikipedian](http://en.wikipedia.org/wiki/Renewable_energy_in_Germany) artikkelin lopusta
94+
95+Aluksi tehdään rohkea teko: poistetaan RandomChartSource, sitä ei enään tarvita - kaikki aiemmat tiedot ovat menetetään ja kaavio tyhjenee ...
96+
97+Miten saadaan uudet tiedot kuvaajalle?
98+
99+### Tarjotaan todellisia tietoja pylväskuvaajalle
100+
101+Lisätään `TListChartSource` lomakkeelle. Se on tietojen koti. Muistetaan että jokainen datapiste koostuu projektissa viidestä y-arvosta. Siksi on asetettava tämän chartsource:n `YCount` arvoon `5` Useita Y-data-arvoja voidaan laittaa luetteloon metodilla `AddXYList` jossa voit määrittää kaikki y-arvot kerralla.
102+
103+``` pascal
104+function TListChartSource.AddXYList(
105+ AX: Double; const AY: array of Double;
106+ const ALabel: String = '';
107+ AColor: TChartColor = clTAColor): Integer;
108+```
109+
110+Mutta ei saa unohtaa, että `Double` array elementtien määrä täytyy vastata `YCount` määrittelyä.
111+
112+Yksinkertaisuuden vuoksi kirjoitettava data otetaan wikipedian sivulta ja annetaan ne ohjelmalle lomakkeen luonnissa `OnCreate` tapahtumassa kutsumalla ListChartSource:n `AddXYList` metodia:
113+
114+``` pascal
115+procedure TForm1.FormCreate(Sender: TObject);
116+begin
117+ with ListChartSource1 do begin
118+ // Y0 = Vesivoima
119+ // Y1 = Tuulivoima (off-shore + on-shore)
120+ // Y2 = Biomassa + biojäte
121+ // Y3 = Aurinkosähkö
122+ // Y4 = Maalämpö
123+ // Kaikki arvot GWh
124+ // Lähde: http://en.wikipedia.org/wiki/Renewable_energy_in_Germany
125+ AddXYList(1990, [15580, 71, 221+1213, 0.6, 0]);
126+ AddXYList(1991, [15402, 100, 260+1211, 1.6, 0]);
127+ AddXYList(1992, [18091, 275, 296+1262, 3.2, 0]);
128+ AddXYList(1993, [18526, 600, 433+1203, 5.8, 0]);
129+ AddXYList(1994, [19501, 909, 569+1306, 8, 0]);
130+ AddXYList(1995, [20747, 1500, 665+1348, 11, 0]);
131+ AddXYList(1996, [18340, 2032, 759+1343, 16, 0]);
132+ AddXYList(1997, [18453, 2955, 880+1397, 26, 0]);
133+ AddXYList(1998, [18452, 4489, 1642+1618, 32, 0]);
134+ AddXYList(1999, [20686, 5528, 1849+1740, 42, 0]);
135+ AddXYList(2000, [24867, 9513, 2893+1844, 64, 0]);
136+ AddXYList(2001, [23241, 10509, 3348+1859, 75, 0]);
137+ AddXYList(2002, [23662, 15786, 4089+1949, 162, 0]);
138+ AddXYList(2003, [17722, 18713, 6086+2161, 313, 0]);
139+ AddXYList(2004, [19910, 25509, 7960+2117, 556, 0.2]);
140+ AddXYList(2005, [19576, 27229, 10978+3047, 1282, 0.2]);
141+ AddXYList(2006, [20042, 30710, 14841+3844, 2220, 0.4]);
142+ AddXYList(2007, [21169, 39713, 19760+4521, 3075, 0.4]);
143+ AddXYList(2008, [20446, 40574, 22872+4659, 4420, 17.6]);
144+ AddXYList(2009, [19036, 30602+38, 25989+4352, 6583, 18.8]);
145+ AddXYList(2010, [20956, 37619+174, 29085+4781, 11683, 27.7]);
146+ AddXYList(2011, [17674, 48315+568, 31920+5000, 19340, 18.8]);
147+ AddXYList(2012, [21200, 45325+675, 35950+4900, 28000, 25.4]);
148+ end;
149+end;
150+```
151+
152+Pitää muistaa linkittää ListChartSource CalculatedChartsource:n `Origin` kohtaan ja kääntää. Tälläinen on tulos kun `CalculatedChartSource.Percentage = true`:
153+
154+![](/wiki-images/c/c9/StackedBarSeries_Percentage_RealData.png)
155+
156+### Viimeistely
157+
158+Kaavion viimeistelyksi lisää otsikot akseleille ("Year" tai "Vuosi" vaaka-akselille. "Energy, GWh" tai "Energia GWh" pystyakselille. Lisäksi olisi hienoa näyttää otsikko kaavion yläpuolella ("Generation of renewable energy in Germany" tai "Uuden sukupolven uusiutuvien energialähteiden edistyminen Saksassa" ) ja alatunnisteeksiviittaus wikipediaan.
159+
160+Vaihda kaavion taustaväri (`BackColor`) valkoiseksi (`clWhite`). Vähennä `Margins.Bottom` arvoon `0` joka poistaa välin pylvään ja `x` akselin välillä.
161+
162+Lopuksi voisi lisätä checkbox:n (valintaruudun) vaihtamaan normaalin ja prosenttiosuuden näyttämiseen pinotussa pylväskaaviossa. Koodi liitetään checkbox:n `OnClick` tapahtumaan.
163+
164+![](/wiki-images/7/7e/StackedBarSeries_Final.png)
165+
166+## Yhteenveto
167+
168+Nämä ovat vaiheet luoda pinottu pylväsdiagrammi:
169+
170+- Tarvitaan vain yksi kuvaaja mutta se sisältää monia y-arvoja.
171+- ChartSource:ssa pitää asettaa `YCount`
172+- Data lisätään kutsumalla `AddXYList` metodia.
173+
174+taulukkoparametrin on vastattava `YCount` arvoa.
175+
176+- Lisää `TChartStyles` komponentti lomakkeelle ja linkitä ominaisuus `Style` pylväskuvaajaan.
177+- Jokaiselle pinotulle pylvästasolle lisätään oma `TChartStyle`.
178+
179+- Värin valinta pinotussa pylväässä tapahtuu vastaavassa ChartStyle:ssä. Lisäksi kirjoita ChartStyle:n `Text` ominaisuuteen teksti joka myös näkyy legend kentässä.
180+- Jotta legend kentässä näkyy teksti niin kuvaajan `Legend.Multiplicity` arvo pitää olla `lmStyle`
181+
182+- Normalisoidun pinotun pylväskaavion luomiseksi, lisää `TCalculatedChartSource` lomakkeelle. Linkki sen `Origin` ominaisuudessa chartsourceen kertoo piirtämiseen saatavan datan. Käytä CalculatedChartSource `Source`:n kuvaajassa. Aseta CalculatedChartSource:n `Percentage` ominaisuus arvoon `true` normalisoinnin aktivoimiseksi 100%.
183+- Samoja menetelmiä voidaan soveltaa kun tehdään pinottu ala tai viiva-kuvaajaa.
184+
185+## Lähdekoodi
186+
187+### Project file
188+
189+``` pascal
190+program project1;
191+
192+{$mode objfpc}{$H+}
193+
194+uses
195+ {$IFDEF UNIX}{$IFDEF UseCThreads}
196+ cthreads,
197+ {$ENDIF}{$ENDIF}
198+ Interfaces, // this includes the LCL widgetset
199+ Forms, Unit1, tachartlazaruspkg
200+ { you can add units after this };
201+
202+{$R *.res}
203+
204+begin
205+ RequireDerivedFormResource := True;
206+ Application.Initialize;
207+ Application.CreateForm(TForm1, Form1);
208+ Application.Run;
209+end.
210+```
211+
212+### Unit1.pas
213+
214+``` pascal
215+unit Unit1;
216+
217+{$mode objfpc}{$H+}
218+
219+interface
220+
221+uses
222+ Classes, SysUtils, FileUtil, TAGraph, TASeries, TASources, TAStyles,
223+ Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;
224+
225+type
226+
227+ { TForm1 }
228+
229+ TForm1 = class(TForm)
230+ CalculatedChartSource1: TCalculatedChartSource;
231+ Chart1: TChart;
232+ Chart1BarSeries1: TBarSeries;
233+ ChartStyles1: TChartStyles;
234+ CheckBox1: TCheckBox;
235+ ListChartSource1: TListChartSource;
236+ Panel1: TPanel;
237+ procedure CheckBox1Click(Sender: TObject);
238+ procedure FormCreate(Sender: TObject);
239+ private
240+ { private declarations }
241+ public
242+ { public declarations }
243+ end;
244+
245+var
246+ Form1: TForm1;
247+
248+implementation
249+
250+{$R *.lfm}
251+
252+{ TForm1 }
253+
254+procedure TForm1.FormCreate(Sender: TObject);
255+begin
256+ with ListChartSource1 do begin
257+ // Y0 = Hydropower
258+ // Y1 = Wind energy (off-shore + on-shore)
259+ // Y2 = Biomass + biogenic share of waste
260+ // Y3 = Photovoltaics
261+ // Y4 = Geothermal energy
262+ // all values in GWh
263+ // source: http://en.wikipedia.org/wiki/Renewable_energy_in_Germany
264+ AddXYList(1990, [15580, 71, 221+1213, 0.6, 0]);
265+ AddXYList(1991, [15402, 100, 260+1211, 1.6, 0]);
266+ AddXYList(1992, [18091, 275, 296+1262, 3.2, 0]);
267+ AddXYList(1993, [18526, 600, 433+1203, 5.8, 0]);
268+ AddXYList(1994, [19501, 909, 569+1306, 8, 0]);
269+ AddXYList(1995, [20747, 1500, 665+1348, 11, 0]);
270+ AddXYList(1996, [18340, 2032, 759+1343, 16, 0]);
271+ AddXYList(1997, [18453, 2955, 880+1397, 26, 0]);
272+ AddXYList(1998, [18452, 4489, 1642+1618, 32, 0]);
273+ AddXYList(1999, [20686, 5528, 1849+1740, 42, 0]);
274+ AddXYList(2000, [24867, 9513, 2893+1844, 64, 0]);
275+ AddXYList(2001, [23241, 10509, 3348+1859, 75, 0]);
276+ AddXYList(2002, [23662, 15786, 4089+1949, 162, 0]);
277+ AddXYList(2003, [17722, 18713, 6086+2161, 313, 0]);
278+ AddXYList(2004, [19910, 25509, 7960+2117, 556, 0.2]);
279+ AddXYList(2005, [19576, 27229, 10978+3047, 1282, 0.2]);
280+ AddXYList(2006, [20042, 30710, 14841+3844, 2220, 0.4]);
281+ AddXYList(2007, [21169, 39713, 19760+4521, 3075, 0.4]);
282+ AddXYList(2008, [20446, 40574, 22872+4659, 4420, 17.6]);
283+ AddXYList(2009, [19036, 30602+38, 25989+4352, 6583, 18.8]);
284+ AddXYList(2010, [20956, 37619+174, 29085+4781, 11683, 27.7]);
285+ AddXYList(2011, [17674, 48315+568, 31920+5000, 19340, 18.8]);
286+ AddXYList(2012, [21200, 45325+675, 35950+4900, 28000, 25.4]);
287+ end;
288+end;
289+
290+procedure TForm1.CheckBox1Click(Sender: TObject);
291+begin
292+ CalculatedChartSource1.Percentage := Checkbox1.Checked;
293+ if Checkbox1.Checked then
294+ Chart1.LeftAxis.Title.Caption := 'Contribution, %'
295+ else
296+ Chart1.LeftAxis.Title.Caption := 'Energy, GWh';
297+end;
298+
299+end.
300+```
301+
302+### Unit1.lfm
303+
304+``` pascal
305+object Form1: TForm1
306+ Left = 596
307+ Height = 270
308+ Top = 353
309+ Width = 517
310+ Caption = 'Form1'
311+ ClientHeight = 270
312+ ClientWidth = 517
313+ OnCreate = FormCreate
314+ LCLVersion = '1.3'
315+ object Chart1: TChart
316+ Left = 0
317+ Height = 248
318+ Top = 22
319+ Width = 517
320+ AxisList = <
321+ item
322+ Minors = <>
323+ Title.LabelFont.Orientation = 900
324+ Title.LabelFont.Style = [fsBold]
325+ Title.Visible = True
326+ Title.Caption = 'Energy, GWh'
327+ end
328+ item
329+ Alignment = calBottom
330+ Minors = <>
331+ Title.LabelFont.Style = [fsBold]
332+ Title.Visible = True
333+ Title.Caption = 'Year'
334+ end>
335+ BackColor = clWhite
336+ Foot.Alignment = taLeftJustify
337+ Foot.Brush.Color = clBtnFace
338+ Foot.Font.Color = clGray
339+ Foot.Text.Strings = (
340+ 'Source: http://en.wikipedia.org/wiki/Renewable_energy_in_Germany'
341+ )
342+ Foot.Visible = True
343+ Legend.Visible = True
344+ Margins.Bottom = 0
345+ Title.Brush.Color = clBtnFace
346+ Title.Font.Color = clBlue
347+ Title.Font.Style = [fsBold]
348+ Title.Text.Strings = (
349+ 'Generation of renewable energy in Germany'
350+ )
351+ Title.Visible = True
352+ Align = alClient
353+ ParentColor = False
354+ object Chart1BarSeries1: TBarSeries
355+ Legend.Multiplicity = lmStyle
356+ BarBrush.Color = clRed
357+ Source = CalculatedChartSource1
358+ Styles = ChartStyles1
359+ end
360+ end
361+ object Panel1: TPanel
362+ Left = 0
363+ Height = 22
364+ Top = 0
365+ Width = 517
366+ Align = alTop
367+ BevelOuter = bvNone
368+ ClientHeight = 22
369+ ClientWidth = 517
370+ TabOrder = 1
371+ object CheckBox1: TCheckBox
372+ Left = 8
373+ Height = 19
374+ Top = 0
375+ Width = 119
376+ Caption = 'Normalize to 100%'
377+ OnClick = CheckBox1Click
378+ TabOrder = 0
379+ end
380+ end
381+ object ChartStyles1: TChartStyles
382+ Styles = <
383+ item
384+ Brush.Color = clBlue
385+ Text = 'Hydropower'
386+ end
387+ item
388+ Brush.Color = clSkyBlue
389+ Text = 'Wind energy'
390+ end
391+ item
392+ Brush.Color = clGreen
393+ Text = 'Biomass'
394+ end
395+ item
396+ Brush.Color = clYellow
397+ Text = 'Photovoltaic'
398+ end
399+ item
400+ Brush.Color = clMaroon
401+ Text = 'Geothermal'
402+ end>
403+ left = 336
404+ top = 96
405+ end
406+ object CalculatedChartSource1: TCalculatedChartSource
407+ Origin = ListChartSource1
408+ left = 104
409+ top = 96
410+ end
411+ object ListChartSource1: TListChartSource
412+ YCount = 5
413+ left = 232
414+ top = 96
415+ end
416+end
417+```
418+
419+---
420+*From the Free Pascal wiki, page "TAChart Tutorial: Stacked BarSeries/fi", as it stood on 2020-02-29 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).*

Back to history