Textové řetězce v oblasti grafu
Představme si, že z nějakého důvodu potřebujeme jednotlivé sloupce označit nějakým písmenkem. Můžeme se s tím setkat např. při statistickém zpracování dat a nebo např. když prostě jenom chceme ukázat dosaženou hodnotu nad sloupcem.
V Rku je přítomna velmi mocná funkce text()
, pomocí které se dá nadefinovat skutečně leccos, a my se teď na ni trošku podíváme.
Nejdříve si nadefinujeme proměnnou obsahující písmenka, která se mají objevit nad sloupečky:
> sloupecky<-c('a', 'b', 'c', 'de', 'f', 'g', 'h', 'osmý
sloupeček\nje trošku větší', 'i', 'j')
> b<-barplot(lokalita1, beside=T, main='Zastoupeni ve skupine 1',
sub='(c) 2004', ylim=c(0, max(lokalita1+10)), col=barvicky, xlab='Skupiny
rostlin', ylab='[%]', names.arg=popisky), text((1:10)+5, lokalita1+5,
sloupecky)
'
Všimněte si, že jsme vytvořili novou proměnnou b, která obsahuje hodnoty důležité pro graf:
> b [,1] [1,] 1.5 [2,] 2.5 [3,] 3.5 [4,] 4.5 [5,] 5.5 [6,] 6.5 [7,] 7.5 [8,] 8.5 [9,] 9.5 [10,] 10.5 >
Tuto proměnnou nyní využijeme při konstrukci popisků nad sloupečky:
text(x, y = NULL, labels = seq(along = x), ...)
tedy
> text(b, lokalita1+2, sloupecky)
Parametry funkce text()
nám umožňují poměrně slučně cvičit s vzhledem textových řetězců. Určitě jste si všimli delšího textu nad osmým sloupečkem. Nápis je nepřehledný, zasahuje do okolních sloupečků, a i když je znakem \n
zlomený na dva řádky, moc mu to nepomáhá.
Řešení je nasnadě. V první fázi určitě pomůže zmenšit písmo násobným parametrem cex
, a protože je textový řetězec opravdu dlouhý, pomůže jeho otočení o 90°. Jako poslední třešinku na dortu si ukážeme možnost zobrazování různých „divočáren“ pomocí funkce text()
:
> b<-barplot(lokalita1, beside=T, main="Zastoupeni ve skupine 1",
sub="(c) 2004", ylim=c(0, max(lokalita1+10)), col=barvicky, xlab="Skupiny
rostlin", ylab="[%]", names.arg=popisky)
> legend(1, 52.5, legenda, col=barvicky, lty=3, lwd=9, ncol=3, cex=0.75,
bty=par(lty=0))
> text(b, lokalita1+4, sloupecky, srt=90, cex=0.75)
> text(2, 40, expression(bar(x) == sum(frac(x[i], n), i == 1, n)), cex=2)
Tímto způsobem jsme vytvořili nám již dávno známý sloupcový graf s legendou. Popisky nad sloupečky jsou o 0.75 násobek menší, než je „normální“ velikost písma (tu můžete změnit pomocí funkce par()
, více viz help(par)
), a pomocí parametru srt
jsou otočeny o 90°.
Jako poslední byla zobrazena jakási rovnice kdesi v oblasti grafu – skutečně jen jako příklad využití. Rovnice byla zase prozměnu vysázena písmem 2× větším.
Rko a čeština
Určitě jste si už všimli, že celou tu dobu používám v grafech české znaky, ale že se to v uvedených obrázcích moc uspokojivě neprojevuje. Je možné, že jsem někde přehlédl nějaký parametr, ale faktem je, že nevím, jak dostat do grafického okna české znaky. Budu rád, když mě někdo v diskusi doplní.
Nejsem na tom ale naštěstí zase tak špatně, protože české znaky umím dostat do produktu, který mě nakonec zajímá asi nejvíce – do PostScriptového souboru.
Rko umí výstup jak do PostScriptu, tak rovnou do formátu LaTeX, což je dost zběsilá varianta, ale funkční. My si ukážeme, jak naložit s tím PostScriptem. Pokud jste četli zatím poslední pokračování od Rada Bonka, víte, jak otevřít výstup do PostScriptu. Proto zde budu telegrafický:
Nejdříve založíme PostScriptový soubor:
> postscript('graf.ps', encoding='ISOLatin2.enc', width=7.5, height=4.5, horizontal=F, paper='special', onefile=F)
Parametrem encoding
zařídíme, že se budou znaky sázet pěkně česky. Výška a šířka výsledného souboru jsou v palcích. Rotaci výsledného grafu po papíře můžete řídit parametrem horizontal
a special
papír je nutný, chcete-li výsledný soubor použít např. v LaTeXu. Jinak mohou být parametry typu ‚a4‘, ‚letter‘ atd. Parametr onefile=T
způsobuje, že se do jednoho souboru může vykreslovat více grafů.
A nyní již můžeme provést standardní příkazy Rka tak, jak je již známe. Uvedu zde jeden příklad, o kterém jsme zatím nemluvili. Půjde, jak jinak, o kytky a pokusím se na něm ukázat některé další parametry a jejich funkce:
popisky<-c(' st. přir. 0', ' st. přir. 1-3', ' st. přir. 4-6',);
legenda<-c('3 - vysýchavé, bohaté', '4 - mírně vlhké, bohaté', '5 -
čerstvé, bohaté', '6 - nitrofilní', '8 - suché, chudé', '9 - mírně vlhké,
chudé', '10 - čerstvé, středně bohaté', '11 - střídavě vlhké', '12 - vlhké,
středne bohaté', '13 - vlhké, bohaté', '17 - +/- subalpinské',);
barvy<-c('lightblue', 'skyblue', 'RoyalBlue', 'LawnGreen', 'Yellow',
'Gold1','Navy', 'violetred4', 'Plum', 'Aquamarine2', 'green4',);
postscript('4B1graf.ps', encoding='ISOLatin2.enc', width=7.5, height=4.5,
horizontal=F, paper='special', onefile=F)
b<-barplot(as.matrix(read.table('rdata.txt')), beside=F, axisnames=F,
main='LT 4B1 - ekologické spektrum synuzie podrostu', names.arg=popisky,
ylim=c(0,100), xlim=c(0,100), horiz=T, width=c(15), col=barvy,
space=c(4.1,0.2,0.2,), axes=F, cex.names=0.75)
axis(1, labels=c('0%', '20%', '40%', '60%', '80%', '100%'), tick=T, line=5,
pos=55, outer=T)
text(b, labels = popisky, srt = 0, , adj=1.4, xpd = TRUE,cex=0.75)
legend(50, 37, legenda, col=barvy, lty=3, lwd=9, ncol=3, cex=0.75,
xjust=0.5, text.width=25, trace=T, bty=par(lty=0))
dev.off(2)
Spousta věcí se dá dělat i jinak a určitě elegantněji. Přesto doufám, že výsledný obrázek po přečtení předcházejícího textu nepotřebuje komentář.
A to je vše, přátelé
A to by bylo protentokrát všechno. Možnosti Rka to zdaleka nevyčerpává. Zaměřil jsem se na sloupcové grafy, protože jsem je v poslední době potřeboval. Podobný princip lze uplatnit i na funkci plot()
a liniové grafy. Není problém zkombinovat i více typů grafů najednou. Mezi zajímavé vlastnosti patří určitě i možnost zobrazování v 3D. Snad někdy příště…
Doufám, že nyní již víte, proč i já říkám zapomeňte na Gnuplot, přichází „R“ :o)