Hlavní navigace

Tvorba grafů pomocí programu "R": vkládání textu, čeština

Jáchym Čepický 9. 6. 2004

V tomto pokračování si ukážeme, jak to zařídit, když chceme do grafíku vložit nějaký ten textový řetězec na požadované místo. Typicky to bývá někam nad sloupce nebo k jiným význačným bodům. Také si povíme, jak je to s češtinou ve výsledném PostScriptovém souboru.

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)

Osmý sloupcový graf

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) 

Desátý sloupcový graf

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) 

Jedenáctý sloupcový graf

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)

Našli jste v článku chybu?

24. 2. 2010 17:59

Kuba (neregistrovaný)

Nejsem vůbec odborník na R ani na programování, ale u mě v R version 2.10.1 stačí jenom zadat příkaz encoding=„latin2“ a od tý doby můžu používat normálně českou diakritiku v grafech i v názvech proměnných…

27. 4. 2009 19:24

uživatel si přál zůstat v anonymitě
Zdravim,

řeším asi poměrne primitivni problém. Mám zdroj dat, který je ve formátu "jméno velikost", čili 2 sloupce, kde první obsahuje seznam jmen a druhy velikost (něčeho u každého jména :).

Rko je prvním programem tohoto druhu, se kterým jsem se potkal a tak po přečtení článků na rootu dokážu vygenerovat sloupcový graf se všemi hodnotami vedle sebe.

Co však v tuto chvíli nedokážu, je přidat popisek ke každému sloupci (jméno), případně vkládat popisky až ke sloupcům, které překonaj…





Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: 7 originálních adventních kalendářů pro mlsné

7 originálních adventních kalendářů pro mlsné

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka