Zobrazování dat

Antonín Slavík
Matematicko-fyzikální fakulta UK

ListPlot a příbuzné funkce

ListPlot a ListLinePlot

ListPlot[Fibonacci[Range[10]]]

randomWalk=NestList[#+RandomReal[{-1,1},2]&,{0,0},1000];

ListLinePlot[randomWalk,AspectRatio->Automatic]

Časové řady a DateListPlot

Časová řada (TimeSeries) reprezentuje posloupnost dvojic {(Subscript[t, i]),(Subscript[v, i])}, kde (Subscript[t, i]) je časový údaj (v libovolném přípustném formátu) a (Subscript[v, i]) je skalár nebo vektor (jednotné dimenze v rámci jedné časové řady), případně Missing[] (chybějící údaj). Hodnoty mezi zadanými časy se interpolují.

K zobrazení časové řady lze použít DateListPlot.

Průměrné denní teploty v Praze v lednu 2022:

teploty=WeatherData["Prague","Temperature",{{2022,1,1},{2022,1,31},"Day"}]

DateListPlot[teploty]

DateListPlot[teploty,PlotStyle->{Thick,Red},BaseStyle->12,DateTicksFormat->{"Day","/","Month"},PlotLabel->"Průměrné denní teploty v Praze v lednu 2022"]

Další funkce

ListPlot3D, ListPointPlot3D, ListLogPlot,... (viz dokumentaci)

BarChart a BarChart3D

BarChart[{(Subscript[y, 1]),(Subscript[y, 2]),…}] sestrojí sloupcový diagram, kde výšky sloupců jsou dány hodnotami (Subscript[y, i]).

beerCountries={"Česká republika","Rakousko","Rumunsko","Německo","Polsko","Namibie","Irsko","Španělsko","Chorvatsko","Lotyšsko"};
beerConsumption={188.6,107.8,100.3,99.0,97.7,95.5,92.9,88.8,85.5,81.4};
beerTitle="Státy s největší spotřebou piva na osobu (litry za rok)";
(* údaje za rok 2019, zdroj: Wikipedia, (HyperlinkTemplate[https://en.wikipedia.org/wiki/List_of_countries_by_beer_consumption_per_capita, https://en.wikipedia.org/wiki/List_of_countries_by_beer_consumption_per_capita, https://en.wikipedia.org/wiki/List_of_countries_by_beer_consumption_per_capita, HyperlinkActionRecycled, HyperlinkActive, , ]) *)

BarChart[beerConsumption]

BarChart[beerConsumption,ChartLegends->beerCountries,PlotLabel->beerTitle,ChartStyle->"BrightBands",BarSpacing->0,BaseStyle->12]

Specifikace barev

Barvy zadány seznamem:

BarChart[{1,2,3,2},ChartStyle->{Brown,Red,Orange,Yellow}]

Barvy určeny výškou a obarvovací funkcí:

BarChart[Table[Binomial[8,k],{k,0,8}],ColorFunction->(Hue[1/2+#/2]&)]

Rozdíl mezi ChartStyle a ColorFunction:

BarChart[Table[Binomial[8,k],{k,0,8}],ChartStyle->"BrightBands"](* barvy sloupců určeny pořadím *)

BarChart[Table[Binomial[8,k],{k,0,8}],ColorFunction->"BrightBands"](* barvy sloupců určeny výškou *)

Nastavení celkového vzhledu pomocí PlotTheme:

Manipulate[BarChart[Table[Binomial[8,k],{k,0,8}],PlotTheme->theme],{theme,{Automatic,"Detailed","Monochrome","Business","Scientific","Marketing","Minimal","Web","Classic"}}]

Placed

Konstrukce Placed[výraz,pozice] vyhodnotí výraz a umístí jej na zadanou pozici; ta je obvykle určena symbolickými názvy jako např. Top, Bottom, Left, Right, Center, apod.

BarChart[{1,2,3,2},ChartStyle->{Brown,Red,Orange,Yellow},ChartLegends->Placed[{"A","B","C","D"},Bottom]]

Tooltip

Konstrukce Tooltip[výraz,text] vrátí vyhodnocený výraz. Při umístění kurzoru myši nad výraz se zobrazí zadaný text.

Tooltip[10!,"Toto je hodnota 10!"]

Plot[{Tooltip[Sin[x],"Toto je graf funkce sinus."],Tooltip[Cos[x],"Toto je graf funkce kosinus."]},{x,0,2Pi}]

BarChart[MapThread[Tooltip[#1,StringForm["``: `` litrů na osobu a rok",#2,Round@#1]]&,{beerConsumption,beerCountries}],ChartLegends->beerCountries,PlotLabel->beerTitle,ChartStyle->"BrightBands",BarSpacing->0,BaseStyle->12]

Data ve více skupinách

staty={"Czech Republic","Poland","Slovakia","Hungary"};
roky=Range[2015,2019];
titleHDP="Růst HDP ve středoevropských zemích (%)";

rustHDP=Round[100*Map[QuantityMagnitude[CountryData[#,{{"GDPRealGrowth"},{First[roky],Last[roky]}}]["Values"]]&,staty],0.01]

BarChart[rustHDP,ChartLegends->roky,BarSpacing->{0,1},ChartLabels->{staty,None},Axes->{True,Automatic},PlotLabel->titleHDP,ChartStyle->{Brown,Red,Orange,Yellow,Black},BaseStyle->12]

Řazení podle roků:

BarChart[Transpose[rustHDP],ChartLegends->staty,BarSpacing->{0,1},ChartLabels->{roky,Automatic},PlotLabel->titleHDP,ChartStyle->{Red,Blue,Yellow,Green},BaseStyle->12]

Další volby

Manipulate[BarChart[Transpose[rustHDP],ChartLegends->staty,BarSpacing->{0,1},ChartLabels->{roky,None},PlotLabel->titleHDP,ChartStyle->{Red,Blue,Yellow,Green},BarOrigin->barOrigin,ChartElementFunction->f,LabelingFunction->labelfn,ChartLayout->layout,BaseStyle->12],{{barOrigin,Bottom,"BarOrigin"},{Top,Bottom,Left,Right}},{{f,"Rectangle","ChartElementFunction"},ChartElementData["BarChart"]},{{labelfn,Automatic,"LabelingFunction"},{Automatic,None,Bottom,Center,Top,Below,Above,Before,After}},{{layout,"Grouped","ChartLayout"},{"Grouped","Stacked","Percentile","Stepped"}}]

K snadnému výběru ChartElementFunction lze použít paletu Chart Element Schemes.

BarChart3D

BarChart3D vyrábí trojrozměrné sloupcové diagramy, používá se stejně jako BarChart.

BarChart3D[beerConsumption,ChartLegends->beerCountries,PlotLabel->beerTitle,ChartStyle->"BrightBands",BarSpacing->0,BaseStyle->12]

BarChart3D[rustHDP,ChartLegends->staty,BarSpacing->{0,1},ChartLabels->{roky,None},PlotLabel->titleHDP,ChartStyle->{Brown,Red,Orange,Yellow,Black},BaseStyle->12]

Manipulate[BarChart3D[rustHDP,ChartLegends->staty,BarSpacing->{0,1},ChartLabels->{roky,None},PlotLabel->titleHDP,ChartLayout->layout,BarOrigin->barOrigin,ChartElementFunction->f,LabelingFunction->labelfn,PlotTheme->theme,BaseStyle->12],{{barOrigin,Bottom,"BarOrigin"},{Top,Bottom,Left,Right}},{{f,"FadingCube","ChartElementFunction"},ChartElementData["BarChart3D"]},{{layout,"Grouped","ChartLayout"},{"Grouped","Stacked","Percentile","Stepped"}},{{labelfn,Automatic,"LabelingFunction"},{Automatic,None,Bottom,Center,Top,Below,Above,Before,After}},{theme,{Automatic,"Detailed","Monochrome","Business","Scientific","Marketing","Minimal","Web","Classic"}}]

PairedBarChart

PairedBarChart[{1,3,5},{2,4,6}]

Příklad: Věkové složení obyvatel ČR k 31. 12. 2020 (zdroj: ČSÚ, https://www.czso.cz/csu/czso/vekove-slozeni-obyvatelstva-2020)

soubor1=Import["http://www.karlin.mff.cuni.cz/~slavik/pokrocili_ls_2021_22/cr_muzi.xlsx"]; 
soubor2=Import["http://www.karlin.mff.cuni.cz/~slavik/pokrocili_ls_2021_22/cr_zeny.xlsx"];

muzi=Table[soubor1[[1,i,2]],{i,7,107}]

zeny=Table[soubor2[[1,i,2]],{i,7,107}]

Celkový počet obyvatel (kontrola):

Total[zeny]+Total[muzi]

PairedBarChart[muzi,zeny,ImageSize->{Automatic,500},AspectRatio->1]

Úprava vzhledu:

PairedBarChart[muzi,zeny,ImageSize->{Automatic,600},AspectRatio->1,ChartStyle->{{Red,Lighter@Blue},None,None},ChartLegends->{{"Muži","Ženy"},None,None},ChartLabels->(Map[If[Mod[#,5]==0,ToString[#],""]&,Range[0,99]]~Join~{"100+"})]

PieChart a PieChart3D

PieChart[{(Subscript[y, 1]),(Subscript[y, 2]),…}] sestrojí výsečový (kruhový, koláčový) diagram, kde velikosti úhlů výsečí jsou úměrné hodnotám (Subscript[y, i]).

pocty={74786,16767,16030,10023,9751,8467,8332,7497,7023,6805,37490};
znacky={"Škoda","Volkswagen","Hyundai","Toyota","Dacia","Peugeot","Kia","Renault","Mercedes-Benz","Ford","Ostatní"};
txt=Style["Registrace nových osobních vozů v ČR, rok 2020",FontSize->14,FontWeight->Bold];
(* zdroj: Svaz dovozců automobilů, (HyperlinkTemplate[http://portal.sda-cia.cz/, https://portal.sda-cia.cz/, https://portal.sda-cia.cz/, HyperlinkActionRecycled, HyperlinkActive, , ]) *)

PieChart[pocty,ChartLegends->znacky,ChartStyle->"BrightBands",PlotLabel->txt]

Poznámka: Kliknutím myší lze vysunout výseč.

Mezikruží se zadaným vnitřním poloměrem (volba SectorOrigin):

PieChart[pocty,ChartLegends->znacky,ChartStyle->"BrightBands",SectorOrigin->{Automatic,1},PlotLabel->txt]

Manipulate[PieChart[pocty,PlotLabel->txt,ChartLegends->znacky,ChartStyle->"BrightBands",ChartElementFunction->f,LabelingFunction->labelfn,SectorOrigin->{{theta,"Clockwise"},radius}],{{f,"Sector","ChartElementFunction"},ChartElementData["PieChart"]},{{labelfn,Automatic,"LabelingFunction"},{Automatic,None,"RadialInner","RadialCenter","RadialOuter","RadialInside","RadialOutside","RadialEdge","RadialCallout","VerticalCallout"}},{theta,0,2Pi},{{radius,1},0,2}]

PieChart3D vyrábí trojrozměrný diagram, používá se stejně jako PieChart.

PieChart3D[pocty,PlotLabel->txt,ChartLegends->znacky,ChartStyle->"BrightBands"]

PieChart3D[pocty,PlotLabel->txt,ChartLegends->znacky,ChartStyle->"BrightBands",SectorOrigin->{Automatic,1}]

Manipulate[PieChart3D[pocty,PlotLabel->txt,SectorOrigin->{{theta,"Counterclockwise"},radius},ChartStyle->"BrightBands",ChartLegends->znacky,SectorOrigin->{Automatic,1},ChartElementFunction->f,LabelingFunction->labelfn],{{f,"CylindricalSector3D","ChartElementFunction"},ChartElementData["PieChart3D"]},{{labelfn,Automatic,"LabelingFunction"},{Automatic,None,"RadialInner","RadialCenter","RadialOuter","RadialInside","RadialOutside","RadialEdge","RadialCallout","VerticalCallout"}},{theta,0,2Pi},{{radius,1},0,2}]

Více skupin dat:

PieChart3D[{{1,2,3,2},{3,4,2,1},{1,2,2,1}},ChartLegends->{"A","B","C","D"}]

Další typy grafů

RectangleChart

RectangleChart[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 1]),(Subscript[y, 2])},…}] sestrojí obdélníkový diagram, kde šířky obdélníků jsou úměrné hodnotám (Subscript[x, i]) a jejich výšky hodnotám (Subscript[y, i]).

Státy G8: Počet obyvatel a hrubý domácí produkt na obyvatele

countries={"Canada","France","Germany","Italy","Japan","Russia","United Kingdom","United States"};

GDPData=Map[{CountryData[#,"Population"],CountryData[#,"GDPPerCapita"]}&,countries]

RectangleChart[GDPData,BaseStyle->14,ChartStyle->"TemperatureMap",ChartLabels->Placed[countries,Below,Rotate[#,Pi/2]&],LabelingFunction->(Placed[#,Tooltip,Style[Column[{Row[{"Population : ",First@#}],Row[{"GDPPerCapita : $",Last@#}],Row[{"GDP : $",Times@@#}]},Alignment->{Left,Bottom},Frame->True],14]&]&),AxesLabel->{"Population","GDP per capita"},ImageSize->Large]

SectorChart

SectorChart[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 1]),(Subscript[y, 2])},…}] sestrojí výsečový diagram, kde velikost úhlů výsečí jsou úměrné hodnotám (Subscript[x, i]) a jejich poloměry hodnotám (Subscript[y, i]).

SectorChart[GDPData,SectorOrigin->{Automatic,11000},BaseStyle->14,ChartLabels->Placed[countries,"RadialCallout",#1&],ChartStyle->"TemperatureMap",Epilog->Text["GDP"],PlotRange->All,LabelingFunction->(Placed[#,Tooltip,Style[Column[{Row[{"Population (Angle): ",First@#}],Row[{"GDP per capita (Radius): $",Last@#}],Row[{"GDP : $",Times@@#}]},Alignment->{Left,Bottom},Frame->True],14]&]&),ImageSize->Large]

RectangleChart3D

RectangleChart3D[{{(Subscript[x, 1]),(Subscript[y, 1]),(Subscript[z, 1])},{(Subscript[x, 2]),(Subscript[y, 2]),(Subscript[z, 2])},…}] sestrojí diagram složený z kvádrů se šířkami (Subscript[x, i]), hloubkami (Subscript[y, i]) a výškami (Subscript[z, i]).

countries={"Algeria","Argentina","Brazil","Chile","Colombia","Egypt","India","Indonesia","Iran","Jamaica","Kenya","Malaysia","Mexico","Nigeria","Peru","Senegal","Sri Lanka","Venezuela","Zimbabwe"};
properties={"FemaleAdultPopulation","TotalFertilityRate","FemaleLifeExpectancy"};
femaleData=Table[CountryData[c,p],{c,countries},{p,properties}]

RectangleChart3D[femaleData,ChartLabels->Placed[countries,Tooltip],BarSpacing->{0,0},ViewPoint->{3,-9,4},AxesLabel->properties,ChartStyle->24,BaseStyle->12,ImageSize->Large]

BubbleChart

BubbleChart[{{(Subscript[x, 1]),(Subscript[y, 1]),(Subscript[z, 1])},{(Subscript[x, 2]),(Subscript[y, 2]),(Subscript[z, 2])},…}] sestrojí bublinkový diagram, kde středy bublinek jsou určeny hodnotami {(Subscript[x, i]),(Subscript[y, i])} a jejich obsahy jsou úměrné hodnotám (Subscript[z, i]).

data=DeleteCases[Map[{#,CountryData[#,"NationalIncome"],CountryData[#,"TotalFertilityRate"],CountryData[#,"Population"]}&,CountryData["Asia"]],{_,Missing["NotAvailable"],_,_}]

countries=Map[First,data];

data=Map[{#[[2]]/#[[4]],#[[3]],#[[4]]}&,data]

labeler[v_,{_,c_},___]:=Placed[Grid[{{countries[[c]]},{"Number of children per woman",v[[2]]},{"Average income per person per year  ",Row[{"$",v[[1]]}]},{"Population",Row[{NumberForm[v[[3]] 10.^-6,{4,2}]," million"}]}},Alignment->Left],Tooltip]

BubbleChart[data,LabelingFunction->labeler,FrameLabel->{"Average income in USD","Total fertility rate"},BaseStyle->12,ImageSize->Large,ChartStyle->"TemperatureMap"]

BubbleChart[data,LabelingFunction->labeler,FrameLabel->{"Average income in USD","Total fertility rate"},BaseStyle->12,ImageSize->Large,ChartStyle->"TemperatureMap",PlotTheme->"Marketing"]

Ostatní typy grafů

BubbleChart3D, SectorChart3D – viz dokumentaci.

Histogram a Histogram3D

Normální čísla

RealDigits vrací seznam cifer daného čísla ve zvolené soustavě:

RealDigits[π,10,6]

Seznam prvních 10 000 cifer čísla π:

piDigits=First[RealDigits[π,10,(10^4)]];

Tally počítá četnosti prvků v zadaném seznamu:

Tally[piDigits]

Histogram zobrazuje četnosti hodnot v daném seznamu pomocí sloupcového diagramu.

Histogram[piDigits]

Histogram[piDigits,ChartStyle->"TemperatureMap",LabelingFunction->Above,Axes->False,ChartLegends->Range[0,9]]

Jaké jsou četnosti dvojic po sobě jdoucích cifer? K získání dvojic použijeme Partition.

Partition[{a,b,c,d,e,f},2,1]

dvojice=Partition[piDigits,2,1];

Sort[Tally[dvojice]]

Histogram3D zobrazuje četnosti dvojic hodnot v daném seznamu:

Histogram3D[dvojice]

Hypotéza: Nechť w je libovolná k-tice cifer a nechť P(w,n) je počet výskytů této k-tice cifer na prvních n místech desítkového zápisu čísla π. Pak (lim_(n→∞))((P(w,n))/n)=(10^(-k)).

Toto je otevřený problém. O číslech splňujících zadanou podmínku říkáme, že jsou normální v desítkové soustavě. Číslo je normální, pokud je normální v soustavě o libovolném základu b∈{2,3,4, …}.

Zdá se, že i mnoho dalších čísel je normálních:

Histogram[First[RealDigits[E,10,(10^4)]],ChartStyle->"TemperatureMap",LabelingFunction->Above,Axes->False,ChartLegends->Range[0,9]]

Histogram3D[Partition[First[RealDigits[E,10,(10^4)]],2,1]]

Histogram[First[RealDigits[(Sqrt[2]),10,(10^4)]],ChartStyle->"TemperatureMap",LabelingFunction->Above,Axes->False,ChartLegends->Range[0,9]]

Histogram3D[Partition[First[RealDigits[(Sqrt[2]),10,(10^4)]],2,1]]

Některé známé výsledky:

E. Borel (1909): Pojem normálního čísla, skoro všechna čísla jsou normální (Lebesgueova míra nenormálních je 0, i když je jich nespočetně mnoho)

W. Sierpinski (1917): První konkrétní příklad normálního čísla

D. G. Champernowne (1933): 0.12345678910111213... je normální

Inset

Inset[obj,{x,y},{x',y'},{w,h}] reprezentuje grafiku, která vznikne transformací zadaného objektu obj. Ten je umístěn tak, že bod na pozici {x',y'} v souřadnicovém systému objektu splyne s bodem na pozici {x,y} v souřadnicovém systému grafiky, do které je objekt vkládán; velikost objektu je nastavena na {w,h}.

g=Graphics[{Blue,Rectangle[{0,0},{1,1}]},PlotRangePadding->None];
Graphics[{Yellow,Rectangle[{-1,-1},{1,1}],Inset[g,{0,0},{1,1},{1/2,1/2}]},PlotRange->{{-2,2},{-2,2}},Frame->True]

Místo x-ové souřadnice lze psát Left, Center nebo Right, místo y-ové souřadnice může být Top, Center, Bottom.

Argumenty {x',y'} a {w,h} jsou nepovinné (výchozí hodnota x',y' je Center, výchozí hodnota {w,h} je přirozená velikost obrázku). Je-li jedna složka {w,h} nastavena na Automatic, bude dopočtena se zachováním poměru stran.

Vložení bitmapového obrázku do grafiky

pivo=;

BarChart[MapThread[Tooltip[#1,StringForm["``: `` litrů na osobu a rok",#2,Round@#1]]&,{beerConsumption,beerCountries}],ChartLegends->beerCountries,Axes->{False,True},PlotLabel->beerTitle,ChartStyle->"BrightBands",BarSpacing->0,Prolog->Inset[pivo,{Center,Top},{Center,Top}]]

Vkládání legend

Příkazy jako Plot, ParametricPlot, ListPlot apod. mají volbu PlotLegends pro vkládání popisků.

Plot[{Tan[x],ArcTan[x]},{x,-(π/2),(π/2)},AspectRatio->1,PlotStyle->{{Thick,Red},{Thick,Blue}}]

Automaticky vyrobená legenda:

Plot[{Tan[x],ArcTan[x]},{x,-(π/2),(π/2)},AspectRatio->1,PlotStyle->{{Thick,Red},{Thick,Blue}},PlotLegends->"Expressions"]

Ručně vyrobená legenda:

legend=Framed[LineLegend[{Red,Blue},{"tg x","arctg x"},LabelStyle->14]]

Plot[{Tan[x],ArcTan[x]},{x,-(π/2),(π/2)},AspectRatio->1,PlotStyle->{{Thick,Red},{Thick,Blue}},BaseStyle->12,PlotLegends->Placed[legend,{Left,Top}]]

Místo LineLegend je k dispozici též PointLegend nebo SwatchLegend.

U obrázků vytvořených pomocí Graphics je potřeba použít konstrukci Legended[grafika, legenda].

Diagram Florence Nightingalové

Florence Nightingale (1820–1910), anglická statistička, spisovatelka a dobrovolná zdravotní sestra v krymské válce. Je autorkou následujícího diagramu:

Florence Nightingale: Notes on Matters Affecting the Health, Efficiency, and Hospital Administration of the British Army (1858).
Diagram znázorňuje počty a příčiny úmrtí britských vojáků v krymské válce (1854–1855). Obsahy ploch jsou úměrné počtům zemřelých vojáků.

Následující údaje jsou převzaty ze stránky http://understandinguncertainty.org/node/214.

mortalityData={{0,(5/8571),(1/8571)},{0,(9/23333),(12/23333)},{0,(6/28333),(11/28333)},{0,(23/28722),(359/28722)},{(1/30246),(5/5041),(138/5041)},{(81/30290),(7/3029),(394/15145)},{(132/30643),(128/30643),(503/30643)},{(41/4248),(53/14868),(211/7434)},{(114/32779),(131/32779),(1725/32779)},{(83/32393),(324/32393),(2761/32393)},{(6/4417),(361/30919),(2120/30919)},{(32/30107),(172/30107),(1205/30107)}};(*number of deaths/size of army*)

colors={Pink,Brown,LightGray};
months={"April 1854","May 1854","June 1854","July 1854","August 1854","September 1854","October 1854","November 1854","December 1854","January 1855","February 1855","March 1855"};
angles=π Range[1,-1,-(1/6)];
gr=Graphics[{EdgeForm[Black],Table[{colors[[i]],Tooltip[Disk[{0,0},(Sqrt[mortalityData[[m,i]]]),{angles[[m+1]],angles[[m]]}],months[[m]]]},{i,3,1,-1},{m,1,12}]}]

legend=SwatchLegend[colors,{"Death from wounds in battle","Death from other causes","Death from disease"},LabelStyle->14]

Framed[Legended[gr,Placed[legend,{Left,Top}]]]

Cvičení

Importujte soubor http://www.karlin.mff.cuni.cz/~slavik/pokrocili_ls_2021_22/ceska-republika.xlsx, který je převzatý ze stránek Českého statistického úřadu a obsahuje údaje o vývoji obyvatelstva České republiky v období 1992–2020.

V 5. sloupci tabulky na řádcích 547 až 558 jsou údaje o počtech narozených v jednotlivých měsících roku 2020. Znázorněte je pomocí sloupcového diagramu (BarChart) s vodorovnými sloupci. Pomocí ChartLabels vyrobte popisky jednotlivých sloupců. Obarvěte sloupci barvami v závislosti na jejich výšce. Použijte vhodné barevné schéma (ColorFunction) a téma (PlotTheme), přidejte k obrázku nadpis (PlotLabel).

V 3. a 4. sloupci tabulky na řádcích 547 až 558 jsou údaje o počtech sňatků a rozvodů v jednotlivých měsících roku 2020. Znázorněte je pomocí trojrozměrného sloupcového diagramu (BarChart3D) se svislými sloupci. Diagram bude tvořen dvanácti skupinami po dvou sloupcích. Pomocí ChartLabels a ChartLegends vyrobte popisky jednotlivých sloupců a legendu k diagramu. Pomocí BarSpacing nastavte vhodné mezery mezi skupinami sloupců, sloupce v jedné skupině budou bez mezer.
Přidejte k obrázku nadpis (PlotLabel). Pomocí volby Ticks odstraňte měřítko na všech osách kromě osy z, kde budou násobky čísla 1000.

Importujte soubor http://www.karlin.mff.cuni.cz/~slavik/pokrocili_ls_2021_22/ceske-zeme.xlsx, který je převzatý ze stránek Českého statistického úřadu a obsahuje údaje o vývoji obyvatelstva v českých zemích v období  1785–2019. Ve 2. sloupci na řádcích 6 až 240 jsou údaje o počtech obyvatel v jednotlivých letech. Prostudujte dokumentaci k funkci TimeSeries, vyrobte ze daných údajů časovou řadu a pomocí DateListPlot zobrazte její graf. Přidejte k obrázku vhodný nadpis (PlotLabel).