Hlavní navigace

Základy tvorby grafů v programovacím jazyku R: knihovna lattice (dokončení)

16. 10. 2020
Doba čtení: 27 minut

Sdílet

Dnes dokončíme popis nejdůležitějších typů grafů podporovaných v knihovně lattice, která rozšiřuje možnosti standardní knihovny R pro práci s grafy. Lattice představuje zajímavou alternativu ke známější knihovně ggplot2.

Obsah

1. Dokončení popisu knihovny lattice – zbylé typy diagramů

2. Nastavení uspořádání mřížky, do které se grafy vykreslují

3. Další ukázky změny uspořádání grafů v mřížce

4. Seskupování a podmínky v 3D grafech

5. Zobrazení hodnot v polích, popř. průběhů funkcí z=f(x,y)

6. Zvýraznění výšek barvou (výšková mapa)

7. Zvýšení přesnosti zobrazení

8. Modifikace barvové palety výškové mapy

9. Přidání kontur (vrstevnic) do výškové mapy

10. Vrstevnice a barvová paleta výškové mapy

11. Skutečný graf s konturami

12. Modifikace grafu s konturami

13. Krabicový diagram

14. Zobrazení nastavení diagramů

15. Drátový (3D) diagram a jeho varianty

16. Knihovna ggplot2

17. Ukázky základních možností knihovny ggplot2

18. Obsah následující části seriálu

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Dokončení popisu knihovny lattice – zbylé typy diagramů

V dnešním článku o programovacím jazyku R navážeme na téma, kterým jsme se začali zabývat minule. Jedná se o knihovnu Lattice, která byla vyvinuta na základě starší knihovny nazvané Trellis Graphics. Ta byla určena pro systém S a S-PLUS. Za vývojem Trellis Graphics stál především R. A. Becker a W. S. Cleveland. Koncepty, které byly v knihovně Trellis Graphics implementovány, byly použity a ukázány i v Clevelandově knize nazvané Visualizing Data, která byla poprvé vydána již v roce 1993. Ovšem je nutné zdůraznit, že Lattice není pouhým přepisem Trellis Graphics; při přechodu ze systému S na R totiž došlo k mnoha vylepšením a taktéž k úpravám API.

Již minule jsme si popsali některé (jednodušší) typy grafů, včetně způsobu jejich umístění do mřížek (grid). Zbylé důležité grafy poskytované knihovnou Lattice budou popsány v článku dnešním. V tabulce pod tímto odstavcem jsou uvedeny odkazy na kapitoly, v nichž jsou jednotlivé typy grafů popsány a kde jsou jejich možnosti prezentovány na demonstračních příkladech:

# Jméno funkce pro vykreslení Stručný popis
1 barchart sloupcový graf
2 histogram klasický histogram
3 densityplot zobrazení distribuce dat přes spojitý interval (zobecnění histogramů)
4 bwplot takzvané krabicové grafy (hodnota + rozptyl atd.)
5 dotplot bodový graf
6 qqmath grafy kvantilu proti matematickým rozložením
7 stripplot korelační diagram, ovšem pouze jednodimenzionální
     
8 xyplot bodový vícedimenzionální graf
9 qq porovnání dvou rozložení
     
10 cloud bodový graf v trojrozměrném prostoru
11 contourplot zobrazení kontur (vrstevnice, popř. izobary na mapě atd.)
12 wireframe zobrazení průběhu, popř. naměřených hodnot ve formě 3D povrchu (drátový model)
13 levelplot zakódování výšky formou barevné informace
Poznámka: v předchozích částech seriálu jsme se mj. zmínili i o možnosti použít vývojová prostředí pro programovací jazyk R dostupná online, tedy bez nutnosti instalace R a R Studia. K již zmíněným prostředím je ještě vhodné přidat online projekt https://rdrr.io/snippets/, který podporuje i práci s grafy poskytovanými standardní knihovnou, knihovnou Lattice a pochopitelně i knihovnou ggplot2. Všechny dnešní demonstrační příklady byly otestovány i v tomto online IDE (i když online IDE pochopitelně nenahradí plnohodnotné R Studio).

2. Nastavení uspořádání mřížky, do které se grafy vykreslují

V předchozím článku jsme si ukázali, že grafy je možné uspořádat do mřížek. Jako příklad si můžeme uvést graf typu xyplot, přesněji řečeno větší množství grafů ukazujících spotřebu auta v závislosti na jeho hmotnosti a navíc na počtu rychlostních stupňů:

library(lattice)
 
input <- mtcars[,c('wt','mpg','hp','gear','cyl')]
 
gear.f <- factor(input$gear,
                 levels = c(3,4,5),
                 labels = c("3 gears","4 gears","5 gears"))
 
cyl.f <- factor(input$cyl,
                levels=c(4,6,8),
                labels=c("4 cyl","6 cyl","8 cyl"))
 
xyplot(wt~mpg | gear.f,
       data=input,
       xlab = "Miles/(US) gallons",
       ylab = "Weight (1000lbs)")

Výsledek bude vypadat následovně:

Obrázek 1: Tři grafy typu xyplot umístěné do mřížky.

Poznámka: v příkladu jsme si pomohli vytvořením faktorů uložených do proměnných gear.f a cyl.f, které vypadají následovně:
 [1] 4 gears 4 gears 4 gears 3 gears 3 gears 3 gears 3 gears 4 gears 4 gears
[10] 4 gears 4 gears 3 gears 3 gears 3 gears 3 gears 3 gears 3 gears 4 gears
[19] 4 gears 4 gears 3 gears 3 gears 3 gears 3 gears 3 gears 4 gears 5 gears
[28] 5 gears 5 gears 5 gears 5 gears 4 gears
Levels: 3 gears 4 gears 5 gears
 
 [1] 6 cyl 6 cyl 4 cyl 6 cyl 8 cyl 6 cyl 8 cyl 4 cyl 4 cyl 6 cyl 6 cyl 8 cyl
[13] 8 cyl 8 cyl 8 cyl 8 cyl 8 cyl 4 cyl 4 cyl 4 cyl 4 cyl 8 cyl 8 cyl 8 cyl
[25] 8 cyl 4 cyl 4 cyl 4 cyl 8 cyl 6 cyl 8 cyl 4 cyl
Levels: 4 cyl 6 cyl 8 cyl

Způsob umístění grafů do mřížky je ovšem možné modifikovat, a to pojmenovaným parametrem layout, v němž určíme rozměr mřížky (počet sloupců × počet řádků):

library(lattice)
 
input <- mtcars[,c('wt','mpg','hp','gear','cyl')]
 
gear.f <- factor(input$gear,
                 levels = c(3,4,5),
                 labels = c("3 gears","4 gears","5 gears"))
 
cyl.f <- factor(input$cyl,
                levels=c(4,6,8),
                labels=c("4 cyl","6 cyl","8 cyl"))
 
xyplot(wt~mpg | gear.f,
       data=input,
       xlab = "Miles/(US) gallons",
       ylab = "Weight (1000lbs)",
       layout = (c(1,3)))

Nyní bude výsledek vypadat odlišně:

Obrázek 2: Grafy umístěné v mřížce pod sebou.

Do grafů pochopitelně můžeme přidat regresní přímku, aproximaci bodů křivkou atd. (což nemá žádný vliv na umístění grafů do mřížky):

library(lattice)
 
input <- mtcars[,c('wt','mpg','hp','gear','cyl')]
 
gear.f <- factor(input$gear,
                 levels = c(3,4,5),
                 labels = c("3 gears","4 gears","5 gears"))
 
cyl.f <- factor(input$cyl,
                levels = c(4,6,8),
                labels = c("4 cyl","6 cyl","8 cyl"))
 
xyplot(wt~mpg | gear.f,
       data=input,
       type = c("p", "r"),
       xlab = "Miles/(US) gallons",
       ylab = "Weight (1000lbs)",
       layout = (c(1,3)))

Obrázek 3: Grafy (včetně regresní přímky) umístěné v mřížce pod sebou.

3. Další ukázky změny uspořádání grafů v mřížce

Podobným způsobem je možné uspořádat i jiné typy grafů, popř. grafy s odlišnými vstupními daty. Opět si připomeňme demonstrační příklad z předchozího článku, v němž je použit datový set nazvaný iris:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
xyplot(Sepal.Length ~ Petal.Length | Species,
       group = Species,
       data = input,
       type = c("p", "smooth"),
       scales = "free")

S výsledkem:

Obrázek 4: Tři grafy typu xyplot umístěné do mřížky 2×2 prvky.

Tyto grafy je možné v případě potřeby umístit pod sebe do jediného obrázku:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
xyplot(Sepal.Length ~ Petal.Length | Species,
       group = Species,
       data = input,
       type = c("p", "smooth"),
       layout = (c(1,3)))

S tímto výsledkem:

Obrázek 5: Tři grafy typu xyplot umístěné do mřížky 3×1 prvek.

Poznámka: automaticky tak získáme stejné měřítko na x-ové ose.

4. Seskupování a podmínky v 3D grafech

Připomeňme si, že s využitím knihovny Lattice je možné vykreslovat 3D grafy, v nichž jsou vyneseny body popsané třemi souřadnicemi. Vstupní data pro takové grafy jsou typicky představována trojicí vektorů nebo datovým rámcem s příslušnými (třemi) sloupci:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')]
 
cloud(Sepal.Length~Sepal.Width*Petal.Length,
      data = input,
      auto.key=TRUE)

Vytvořený výsledek:

Obrázek 6: Trojrozměrný graf s vynesenými body.

Tyto grafy je možné (podobně jako prakticky i všechny ostatní grafy) rozdělit podle čtvrté hodnoty, resp. přesněji vektoru či faktoru s hodnotami. Zápis této čtvrté hodnoty je proveden za znakem |:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
cloud(Sepal.Length~Sepal.Width*Petal.Length | Species,
      data = input,
      auto.key = TRUE,
      layout = (c(3,1)))

Obrázek 7: Umístění tří grafů vedle sebe (viz volba layout).

Tento typ grafů většinou vyžaduje změnu velikosti písma použitého při popisu souřadných os. Pro tento účel se používají parametry xlab, ylab a zlab, kterým se předá seznam obsahující jeden pojmenovaný prvek cex s relativní hodnotou písma:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
cloud(Sepal.Length~Sepal.Width*Petal.Length | Species,
       data = input,
       auto.key = TRUE,
       layout = (c(3,1)),
       xlab = list(cex = 0.3),
       ylab = list(cex = 0.3),
       zlab = list(cex = 0.3))

S výsledkem:

Obrázek 8: Modifikace velikosti popisků na souřadných osách.

I v tomto typu grafu je možné sdružit hodnoty podle třetí, resp. čtvrté hodnoty. K tomuto účelu použijeme parametr nazvaný group, podobně, jako jsme to dělali u jiných typů grafů:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
cloud(Sepal.Length ~ Sepal.Length*Petal.Width,
      data = input,
      group = Species,
      auto.key = TRUE)

Obrázek 9: Sdružení hodnot v grafu na základě hodnot uložených ve vektoru Species.

Pro úplnost si ještě ukažme kombinaci obou předchozích možností. Navíc parametrem pch změníme styl vykreslování bodů:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
cloud(Sepal.Length ~ Sepal.Width*Petal.Width,
      data = input,
      group = Species,
      auto.key = TRUE,
      pch = 19,
      xlab = list(cex=0.6),
      ylab = list(cex=0.6),
      zlab = list(cex=0.6))

Obrázek 10: Změna stylu vykreslení bodů v grafu typu cloud.

5. Zobrazení hodnot v polích, popř. průběhů funkcí z=f(x,y)

Poměrně často se setkáme s nutností nějakým způsobem vizualizovat průběh funkce z=f(x,y), popř. vizualizovat hodnoty uložené v dvojrozměrné matici (může se jednat o naměřené hodnoty atd.). K vizualizaci lze použít relativně velké množství technik, přičemž jednou známou technikou je zvýraznění výšek barvou (vznikne výšková mapa), použití kontur (vrstevnic), popř. vykreslení drátového modelu v případě, že se jedná o spojitou funkci. V následujících kapitolách se seznámíme se všemi třemi zmíněnými možnostmi – každý typ vizualizace je přitom v knihovně Lattice představován odlišným typem grafu.

xyzzy

Obrázek 11: Jeden typ grafu podporovaný knihovnou Matplotlib – Funkce typu z=f(x,y) zobrazená formou vrstevnic.

Podobné typy grafů nalezneme i v knihovně Matplotlib používané v jazyku Python a mnohdy kombinovanou s knihovnou Numpy. Pro porovnání s dále uvedenými grafy jsou v této kapitole zobrazeny dvě vizualizace provedené právě Matplotlibem.

xyzzy

Obrázek 12: Podporována je i relativně široká skupina 3D grafů.

6. Zvýraznění výšek barvou (výšková mapa)

Pro vykreslení výškové mapy (viděné ze směru osy z) se zvýrazněním výšek různými barvami se používá graf pojmenovaný levelplot. Ve zcela nejjednodušším příkladu si necháme zobrazit data uložená ve vektoru volcano (Maunga Whau, resp. Mt Eden):

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]  100  100  101  101  101  101  101  100  100   100   101   101   102   102
[2,]  101  101  102  102  102  102  102  101  101   101   102   102   103   103
[3,]  102  102  103  103  103  103  103  102  102   102   103   103   104   104
[4,]  103  103  104  104  104  104  104  103  103   103   103   104   104   104
[5,]  104  104  105  105  105  105  105  104  104   103   104   104   105   105
[6,]  105  105  105  106  106  106  106  105  105   104   104   105   105   106
     [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,]   102   102   103   104   103   102   101   101   102   103   104   104
[2,]   103   103   104   105   104   103   102   102   103   105   106   106
[3,]   104   104   105   106   105   104   104   105   106   107   108   110
[4,]   105   105   106   107   106   106   106   107   108   110   111   114
[5,]   105   106   107   108   108   108   109   110   112   114   115   118
[6,]   106   107   109   110   110   112   113   115   116   118   119   121
     [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
[1,]   105   107   107   107   108   108   110   110   110   110   110   110
[2,]   107   109   110   110   110   110   111   112   113   114   116   115
[3,]   111   113   114   115   114   115   116   118   119   119   121   121
[4,]   117   118   117   119   120   121   122   124   125   126   127   127
[5,]   121   122   121   123   128   131   129   130   131   131   132   132
[6,]   124   126   126   129   134   137   137   136   136   135   136   136
     [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
[1,]   110   110   108   108   108   107   107   108   108   108   108   108
[2,]   114   112   110   110   110   109   108   109   109   109   109   108
[3,]   120   118   116   114   112   111   110   110   110   110   109   109
[4,]   126   124   122   120   117   116   113   111   110   110   110   109
[5,]   131   130   128   126   122   119   115   114   112   110   110   110
[6,]   136   135   133   129   126   122   118   116   115   113   111   110
     [,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61]
[1,]   107   107   107   107   106   106   105   105   104   104   103
[2,]   108   108   108   107   107   106   106   105   105   104   104
[3,]   109   109   108   108   107   107   106   106   105   105   104
[4,]   109   109   109   108   108   107   107   106   106   105   105
[5,]   110   110   109   109   108   107   107   107   106   106   105
[6,]   110   110   110   109   108   108   108   107   107   106   106

Vykreslení se provede jediným příkazem:

library("lattice")
 
head(volcano)
 
levelplot(volcano)

S tímto výsledkem:

Obrázek 13: Zobrazení hodnot uložených v proměnné volcano.

Zobrazit však můžeme i průběh složitější funkce:

library("lattice")
 
x <- seq(1, 2*pi, length.out=20)
y <- seq(1, 2*pi, length.out=20)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="X",
          main="")

Tento příklad pracuje následovně:

  1. Vytvoří se dvojice vektorů x a y
  2. Funkcí outer se vytvoří matice s kombinacemi vektorů x a y se specifikovaným výpočtem
  3. Výsledek této funkce použijeme pro naplnění pomocných proměnných r1r2
  4. Funkcí expand.grid se vytvoří datový rámec s dvojicí sloupců naplněných obsahem vektorů xy
  5. Do datového rámce doplníme třetí sloupec se z-ovými hodnotami

Příklad matice vytvořené funkcí:

outer(seq(1,10), seq(1,10))
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    2    3    4    5    6    7    8    9    10
 [2,]    2    4    6    8   10   12   14   16   18    20
 [3,]    3    6    9   12   15   18   21   24   27    30
 [4,]    4    8   12   16   20   24   28   32   36    40
 [5,]    5   10   15   20   25   30   35   40   45    50
 [6,]    6   12   18   24   30   36   42   48   54    60
 [7,]    7   14   21   28   35   42   49   56   63    70
 [8,]    8   16   24   32   40   48   56   64   72    80
 [9,]    9   18   27   36   45   54   63   72   81    90
[10,]   10   20   30   40   50   60   70   80   90   100

Příklad matice vytvořené funkcí:

outer(seq(1,10), seq(1,10), "+")
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    2    3    4    5    6    7    8    9   10    11
 [2,]    3    4    5    6    7    8    9   10   11    12
 [3,]    4    5    6    7    8    9   10   11   12    13
 [4,]    5    6    7    8    9   10   11   12   13    14
 [5,]    6    7    8    9   10   11   12   13   14    15
 [6,]    7    8    9   10   11   12   13   14   15    16
 [7,]    8    9   10   11   12   13   14   15   16    17
 [8,]    9   10   11   12   13   14   15   16   17    18
 [9,]   10   11   12   13   14   15   16   17   18    19
[10,]   11   12   13   14   15   16   17   18   19    20

Datový rámec vypadá následovně:

           x        y            z
1   1.000000 1.000000  1.295837688
2   1.278062 1.000000  1.480223667
3   1.556125 1.000000  1.586134959
4   1.834187 1.000000  1.604315197
5   2.112250 1.000000  1.535943853
6   2.390312 1.000000  1.390926079
7   2.668374 1.000000  1.185456798
8   2.946437 1.000000  0.939077730
9   3.224499 1.000000  0.671729601
10  3.502561 1.000000  0.401445589
11  3.780624 1.000000  0.143114910
12  4.058686 1.000000 -0.091738191
...
...
...
394 4.614811 6.283185  0.503842514
395 4.892873 6.283185  0.390274092
396 5.170936 6.283185  0.246646275
397 5.448998 6.283185  0.078826471
398 5.727061 6.283185 -0.105383335
399 6.005123 6.283185 -0.296588296
400 6.283185 6.283185 -0.484313825

Obrázek 14: Výsledek běhu předchozího demonstračního příkladu.

7. Zvýšení přesnosti zobrazení

V demonstračním příkladu uvedeného v předchozí kapitole je vytvořen datový rámec s pouhými 400 řádky, přičemž z-ové hodnoty jsou uloženy v pravidelné mřížce o „rozlišení“ 20×20 bodů. Rozlišení mřížky můžeme zvýšit, a to typicky tak, že zvětšíme počet prvků ve vektorech x a y. Výsledkem bude, že výšková mapa bude sestrojena na základě mřížky 200×200 (40000) hodnot:

library("lattice")
 
x <- seq(1, 2*pi, length.out=200)
y <- seq(1, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="X",
          main="")

Obrázek 15: Nyní je výšková mapa vytvořena na základě mřížky 200×200 hodnot.

8. Modifikace barvové palety výškové mapy

Barvy vykreslení je možné v případě potřeby modifikovat u všech typů grafů, ovšem především u výškové mapy se setkáme s použitím plnohodnotné barvové palety. Ta je specifikována pojmenovaným parametrem col.regions přičemž je k dispozici několik standardních barvových palet. V následujících demonstračních příkladech si je ukážeme.

Barvová paleta terrain:

library("lattice")
 
x <- seq(1, 2*pi, length.out=200)
y <- seq(1, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          col.regions = terrain.colors(100))

Obrázek 16: Použití barvové palety terrain.

Barvová paleta rainbow:

library("lattice")
 
x <- seq(1, 2*pi, length.out=200)
y <- seq(1, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          col.regions = rainbow(100))

Obrázek 17: Použití barvové palety rainbow.

Barvová paleta heat:

library("lattice")
 
x <- seq(1, 2*pi, length.out=200)
y <- seq(1, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          col.regions = heat.colors(100))

Obrázek 18: Použití barvové palety heat.

Barvová paleta topo:

library("lattice")
 
x <- seq(1, 2*pi, length.out=200)
y <- seq(1, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          col.regions = topo.colors(100))

Obrázek 19: Použití barvové palety topo.

9. Přidání kontur (vrstevnic) do výškové mapy

Do výškové mapy je možné pro zvýraznění oblastí se stejnou či podobnou hodnotou přidat i kontury neboli vrstevnice. Úprava grafu je z pohledu programátora triviální – přidá se pojmenovaný parametr contour nastavený na hodnotu TRUE:

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          contour=TRUE,
          col.regions = terrain.colors(20000))

Obrázek 20: Zvýraznění kontur (vrstevnic) ve výškové mapě.

10. Vrstevnice a barvová paleta výškové mapy

Pochopitelně nám nic nebrání i při vykreslení vrstevnic současně vybrat i barvovou paletu pro reprezentaci výšek:

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          contour=TRUE,
          col.regions = topo.colors(200))

Obrázek 21: Vykreslení vrstevnic a současně i změna barvové palety (topo).

Změna barvové palety na heat:

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
levelplot(z ~ x*y,
          data=grid,
          xlab="",
          ylab="",
          main="",
          contour=TRUE,
          col.regions = heat.colors(200))

Obrázek 22: Vykreslení vrstevnic a současně i změna barvové palety (heat).

Poznámka: barvová paleta má ve skutečnosti velký vliv na vnímání oblastí s malou či naopak velkou výškou atd. Není tedy zcela jedno, kterou paletu použijeme.

11. Skutečný graf s konturami

Knihovna Lattice obsahuje i další typ grafu nazvaný contourplot. Tento typ grafu vykresluje pouze vrstevnice, nikoli již výšky zakódované do různých barev. Podívejme se, jak tento graf může vypadat, když použijeme stejný zdroj dat, jako v předchozích příkladech (funkce typu z=f(x,y)):

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
contourplot(z ~ x * y,
            grid,
            col.regions = topo.colors(20),
            at = c(-Inf, seq(-0.8, 0.8, by = 0.2), Inf))

Vidíme, že se skutečně spojily ty části plochy, které mají stejnou výšku (a existuje mezi nimi spojení s touto výškou):

Obrázek 23: Graf s konturami (vrstevnicemi).

12. Modifikace grafu s konturami

Jedna z možných modifikací grafu s konturami (vrstevnicemi) spočívá v tom, že specifikujeme maximální a minimální hodnoty, pro které se mají vrstevnice vykreslit a taktéž krok (rozdíl výšek) mezi vrstevnicemi. Zvolme tedy rozsah od –2,0 do 2,0 s krokem 0,1:

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
contourplot(z ~ x * y, grid, col.regions = topo.colors(20),
          at = c(-Inf, seq(-2.0, 2.0, by = 0.1), Inf))

Výsledkem je graf s více než dvojnásobným počtem vrstevnic:

Obrázek 24: Změna rozsahu a hustoty vrstevnic.

Můžeme naopak určit, že se mají vykreslovat jen vrstevnice pro hodnoty větší než 0:

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=200)
y <- seq(1.0, 2*pi, length.out=200)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
contourplot(z ~ x * y, grid, col.regions = topo.colors(20),
          at = c(-Inf, seq(0.0, 2.0, by = 0.1), Inf))

Výsledkem je tento graf:

Obrázek 25: Změna rozsahu a hustoty vrstevnic.

A konečně si ukažme, jak se graf změní ve chvíli, kdy je k dispozici mnohem menší množství hodnot (100× méně):

library("lattice")
 
x <- seq(1.0, 2*pi, length.out=20)
y <- seq(1.0, 2*pi, length.out=20)
 
r1 <- as.vector(sqrt(outer(x^2, y^2, "+")))
r2 <- as.vector(sqrt(outer((x-3)^2, (y-3)^2, "+")))
 
grid <- expand.grid(x=x, y=y)
grid$z <- sin(r1) + sin(r2)
 
contourplot(z ~ x * y, grid, col.regions = topo.colors(20),
          at = c(-Inf, seq(0.0, 2.0, by = 0.1), Inf))

Výsledek již nebude (podle očekávání) tak pěkný, jako v případech předchozích:

Obrázek 26: Malé množství hodnot pro výpočet vrstevnicového grafu.

13. Krabicový diagram

Dalším typem grafu, který knihovna Lattice podporuje, jsou takzvané krabicové diagramy. Tento typ diagramů nezobrazuje pouze naměřené či vypočtené hodnoty, ale vykreslí i kvartily. Ohraničení je vypočteno a zobrazeno na základě prvního a třetího kvartilu a navíc se zobrazuje i úsečka (vodorovná či svislá) představující medián. Podívejme se nyní na způsob vykreslení krabicového diagramu naležato – meze jsou tedy zobrazeny napravo a nalevo od zobrazované hodnoty:

library(lattice)
 
input <- mtcars[,c('wt','mpg','hp','gear','cyl')]
 
gear.f <- factor(input$gear,
                 levels = c(3,4,5),
                 labels = c("3gears","4gears","5gears"))
 
cyl.f <- factor(input$cyl,
                levels=c(4,6,8),
                labels=c("4cyl","6cyl","8cyl"))
 
bwplot(cyl.f~mpg|gear.f,
   data = input,
   ylab = "Cylinders",
   xlab = "Miles per Gallon",
   main = "Mileage by Cylinders and Gears",
   layout = (c(1,3)))

S tímto výsledkem:

Obrázek 27: Jednoduchý krabicový diagram.

Odlišný krabicový diagram, tentokrát pro data získána z data setu iris:

library(lattice)
 
data("iris")
head(iris)
 
input <- iris[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width','Species')]
 
bwplot(Sepal.Width ~ Sepal.Length,
      data = input,
      auto.key = TRUE)

Obrázek 28: Další forma krabicového diagramu.

14. Zobrazení nastavení diagramů

Způsob vykreslení diagramů knihovnou Lattice lze ovlivnit, a to mnoha způsoby. Všechny důležité volby nastavení zobrazení je možné taktéž vykreslit do speciální grafu vyvolaného funkcí show.settings():

library(lattice)
show.settings()

Výsledek by měl vypadat následovně:

Obrázek 29: Zobrazení voleb ovlivňujících styl vykreslení grafů a diagramů.

15. Drátový (3D) diagram a jeho varianty

Posledním typem diagramu, který si dnes popíšeme, je takzvaný drátový (wireframe) diagram, který zobrazuje průběh funkce z=f(x,y), popř. naměřené či vypočtené hodnoty uložené do matice. Tento diagram je zobrazen funkcí wireframe, která se může volat se stejnými parametry jako výše zmíněný diagram levelplot. Podívejme se tedy na jednoduchý demonstrační příklad, který vychází z příkladů, které jsme si již ukazovali v předchozích kapitolách:

library(lattice)
 
x <- seq(-1.1*pi, 1.1 * pi, length.out = 30)
y <- seq(-1.1*pi, 1.1 * pi, length.out = 30)
r <- as.vector(sqrt(outer(x^2, y^2, "+")))
grid <- expand.grid(x=x, y=y)
grid$z <- cos(r)
  
wireframe(z ~ x * y, grid, col.regions = topo.colors(20),
          at = c(-Inf, seq(-0.8, 0.8, by = 0.2), Inf))

Výsledný obrázek s grafem by měl vypadat následovně:

Obrázek 30: Drátový diagram s vyplněnými ploškami.

16. Knihovna ggplot2

V navazující části tohoto seriálu budou popsány základní koncepty, na nichž je postavena knihovna nazvaná ggplot2. Ta byla vytvořená v roce 2005 Hadleym Wickhamem ve formě balíku určeného pro programovací jazyk R, ovšem později došlo k rozšíření i pro další programovací jazyky. ggplot2 je založen na tvorbě grafů s využitím grammar of graphics popsané Lelandem Wilkinsonem. Tato gramatika umožňuje popisovat jednotlivé objekty, z nichž se graf skládá.

17. Ukázky základních možností knihovny ggplot2

Bez podrobnějšího popisu si ukažme základní možnosti knihovny ggplot2, a to na datech, která již známe:

library(ggplot2)
 
qplot(wt, mpg, data = mtcars)

Obrázek 31: Graf vykreslený knihovnou ggplot2.

Popř. obarvená varianta:

library(ggplot2)
 
qplot(wt, mpg, data = mtcars, colour = factor(cyl))

Obrázek 32: Další graf vykreslený knihovnou ggplot2

Root online školení

18. Obsah následující části seriálu

V navazující části seriálu o programovacím jazyku R si popíšeme základní koncepty, na nichž je postavena knihovna ggplot2. Tyto informace budou použitelné nejenom pro uživatele používající přímo jazyk R, ale i pro programátory, kteří ggplot2 volají z dalších programovacích jazyků.

19. Repositář s demonstračními příklady

Zdrojové kódy všech dnes použitých demonstračních příkladů byly uloženy do nového Git repositáře, který je dostupný na adrese https://github.com/tisnik/r-examples V případě, že z nějakého důvodu nebudete chtít klonovat celý repositář (ten je ovšem – alespoň prozatím – velmi malý, dnes má stále jen jednotky kilobajtů), můžete namísto toho použít odkazy na jednotlivé demonstrační příklady, které naleznete v následující tabulce:

# Příklad Stručný popis Cesta
1 01_iris_cloud.R trojrozměrný graf s vynesenými body https://github.com/tisnik/r-examples/blob/master/09-lattice/01_iris_cloud.R
2 02_iris_cloud2.R umístění tří grafů vedle sebe (viz volba layout) https://github.com/tisnik/r-examples/blob/master/09-lattice/02_iris_cloud2.R
3 03_iris_cloud3.R sdružení hodnot v grafu na základě hodnot uložených ve vektoru Species https://github.com/tisnik/r-examples/blob/master/09-lattice/03_iris_cloud3.R
4 04_iris_cloud2_font.R modifikace velikosti popisků na souřadných osách https://github.com/tisnik/r-examples/blob/master/09-lattice/04_iris_cloud2_font.R
5 05_iris_cloud3_font.R změna stylu vykreslení bodů v grafu typu cloud https://github.com/tisnik/r-examples/blob/master/09-lattice/05_iris_cloud3_font.R
6 06_factors.R získání faktorů z datového rámce (nevykreslí se žádný graf) https://github.com/tisnik/r-examples/blob/master/09-lattice/06_factors.R
7 07_bwplot.R jednoduchý krabicový diagram https://github.com/tisnik/r-examples/blob/master/09-lattice/07_bwplot.R
8 08_bwplot_iris.R jednoduchý krabicový diagram, založeno na jiném datovém setu https://github.com/tisnik/r-examples/blob/master/09-lattice/08_bwplot_iris.R
9 09_xyplot2.R graf rozdělený podle počtu rychlostních stupňů https://github.com/tisnik/r-examples/blob/master/09-lattice/09_xyplot2.R
10 10_xyplot3.R grafy umístěné v mřížce pod sebe https://github.com/tisnik/r-examples/blob/master/09-lattice/10_xyplot3.R
11 11_xyplot4.R grafy umístěné v mřížce pod sebe, přidání regresní přímky https://github.com/tisnik/r-examples/blob/master/09-lattice/11_xyplot4.R
12 12_xyplot_iris1.R tři grafy typu xyplot umístěné do mřížky 2×2 prvky https://github.com/tisnik/r-examples/blob/master/09-lattice/12_xyplot_iris1.R
13 13_xyplot_iris2.R tři grafy typu xyplot umístěné do mřížky 3×1 prvek https://github.com/tisnik/r-examples/blob/master/09-lattice/13_xyplot_iris2.R
14 14_levelplot_volcano.R výšková mapa sestavená na základě skutečných výškových map https://github.com/tisnik/r-examples/blob/master/09-lattice/14_levelplot_volcano.R
15 15_levelplot_basic.R výšková mapa vytvořená z matice 20×20 vypočtených hodnot https://github.com/tisnik/r-examples/blob/master/09-lattice/15_levelplot_basic.R
16 16_levelplot_finer_grid.R výšková mapa vytvořená z matice 200×200 vypočtených hodnot https://github.com/tisnik/r-examples/blob/master/09-lattice/16_levelplot_finer_grid.R
17 17_levelplot_terrain_colors.R barvová paleta terrain https://github.com/tisnik/r-examples/blob/master/09-lattice/17_levelplot_terrain_colors.R
18 18_levelplot_rainbow.R barvová paleta rainbow https://github.com/tisnik/r-examples/blob/master/09-lattice/18_levelplot_rainbow.R
19 19_levelplot_heat_colors.R barvová paleta heat https://github.com/tisnik/r-examples/blob/master/09-lattice/19_levelplot_heat_colors.R
20 20_levelplot_topo_colors.R barvová paleta topo https://github.com/tisnik/r-examples/blob/master/09-lattice/20_levelplot_topo_colors.R
21 21_contours_terrain.R zvýraznění kontur (vrstevnic) ve výškové mapě, barvová paleta terrain https://github.com/tisnik/r-examples/blob/master/09-lattice/21_contours_terrain.R
22 22_contours_topo.R zvýraznění kontur (vrstevnic) ve výškové mapě, barvová paleta topo https://github.com/tisnik/r-examples/blob/master/09-lattice/22_contours_topo.R
23 23_contours_heat.R zvýraznění kontur (vrstevnic) ve výškové mapě, barvová paleta heat https://github.com/tisnik/r-examples/blob/master/09-lattice/23_contours_heat.R
24 24_contour_plot.R graf vrstevnic, základní varianta https://github.com/tisnik/r-examples/blob/master/09-lattice/24_contour_plot.R
25 25_contour_plot.R graf vrstevnic, modifikace maximální a minimální hodnoty https://github.com/tisnik/r-examples/blob/master/09-lattice/25_contour_plot.R
26 26_contour_plot.R graf vrstevnic, modifikace maximální a minimální hodnoty https://github.com/tisnik/r-examples/blob/master/09-lattice/26_contour_plot.R
27 27_contour_plot.R graf vrstevnic, zmenšení mřížky s hodnotami https://github.com/tisnik/r-examples/blob/master/09-lattice/27_contour_plot.R
28 28_wireframe.R drátový model (3D) https://github.com/tisnik/r-examples/blob/master/09-lattice/28_wireframe.R
29 29_ggplot.R ukázka základních možností knihovny ggplot2 https://github.com/tisnik/r-examples/blob/master/09-lattice/29_ggplot.R
30 30_ggplot.R ukázka základních možností knihovny ggplot2 https://github.com/tisnik/r-examples/blob/master/09-lattice/30_ggplot.R
31 settings.R zobrazení možností nastavení typů grafů https://github.com/tisnik/r-examples/blob/master/09-lattice/settings.R

20. Odkazy na Internetu

  1. The R Project for Statistical Computing
    https://www.r-project.org/
  2. An Introduction to R
    https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf
  3. R (programming language)
    https://en.wikipedia.org/wi­ki/R_(programming_language)
  4. The R Programming Language
    https://www.tiobe.com/tiobe-index/r/
  5. R Graphics Second Edition
    https://www.stat.auckland­.ac.nz/~paul/RG2e/
  6. Grid
    https://www.stat.auckland­.ac.nz/~paul/grid/grid.html
  7. Interactive Course: Data Visualization with lattice in R
    https://www.datacamp.com/courses/data-visualization-in-r-with-lattice
  8. Lattice: trellis graphics for R
    https://lattice.r-forge.r-project.org/
  9. Lattice: Multivariate Data Visualization with R
    http://lmdvr.r-forge.r-project.org/figures/figures.html
  10. Getting Started with Lattice Graphics
    https://lattice.r-forge.r-project.org/Vignettes/src/lattice-intro/lattice-intro.pdf
  11. Using lattice’s xyplot()
    https://homerhanumat.github­.io/tigerstats/xyplot.html
  12. ggplot2 Tutorial
    https://www.tutorialspoin­t.com/ggplot2/index.htm
  13. Lattice Package in R with Functions and Graphs
    https://techvidvan.com/tu­torials/lattice-package-in-r/
  14. The R Graph Gallery
    https://www.r-graph-gallery.com/index.html
  15. Lattice Graphs
    https://www.statmethods.net/ad­vgraphs/trellis.html
  16. ggplot2 (Graph gallery)
    https://www.r-graph-gallery.com/ggplot2-package.html
  17. R Markdown
    https://rmarkdown.rstudio.com/
  18. R Markdown: The Definitive Guide
    https://bookdown.org/yihui/rmarkdown/
  19. R Markdown Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf
  20. Introduction to R Markdown
    https://rmarkdown.rstudio­.com/articles_intro.html
  21. R Cheat Sheets
    https://blog.sergiouri.be/2016/07/r-cheat-sheets.html
  22. R Cheat Sheet
    https://s3.amazonaws.com/quandl-static-content/Documents/Quandl±+R+Che­at+Sheet.pdf
  23. Base R Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/06/r-cheat-sheet.pdf
  24. PYPL PopularitY of Programming Language
    https://pypl.github.io/PYPL.html
  25. Tiobe index
    https://www.tiobe.com/tiobe-index/
  26. Stack Overflow: Most Loved, Dreaded & Wanted Programming Languages In 2020
    https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
  27. How to Install and Use R on Ubuntu
    https://itsfoss.com/install-r-ubuntu/
  28. R programming for beginners – Why you should use R
    https://www.youtube.com/wat­ch?v=9kYUGMg_14s
  29. GOTO 2012 • The R Language The Good The Bad & The Ugly
    https://www.youtube.com/wat­ch?v=6S9r_YbqHy8
  30. R vs Python – What should I learn in 2020? | R and Python Comparison
    https://www.youtube.com/wat­ch?v=eRP_J2yLjSU
  31. R Programming 101
    https://www.youtube.com/c/rpro­gramming101
  32. Seriál Tvorba grafů pomocí programu „R“
    https://www.root.cz/serialy/tvorba-grafu-pomoci-programu-r/
  33. Tvorba grafů pomocí programu „R“: úvod
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-1/
  34. Tvorba grafů pomocí programu „R“: pokročilé funkce
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-pokrocile-funkce/
  35. Tvorba grafů pomocí programu „R“: vkládání textu, čeština
    https://www.root.cz/clanky/grafy-pomoci-programu-r-vkladani-textu-cestina/
  36. Cesta erka: Krok nultý – instalace & nastavení – prostředí, projekty, package
    https://www.jla-data.net/r4su/r4su-environment-setup/
  37. Cesta erka: Krok první – operace a struktury – proměnné, rovnítka a dolary
    https://www.jla-data.net/r4su/r4su-data-structures/
  38. Cesta erka: Krok druhý – načtení externích dat – csvčka, excely a databáze
    https://www.jla-data.net/r4su/r4su-read-data/
  39. Cesta erka: Krok třetí – manipulace s daty – dplyr, slovesa a pajpy
    https://www.jla-data.net/r4su/r4su-manipulate-data/
  40. Cesta erka: Krok čtvrtý – podání výsledků – ggplot, geomy a estetiky
    https://www.jla-data.net/r4su/r4su-report-results/
  41. Cesta erka: Krok pátý – case study – případ piva v Praze
    https://www.jla-data.net/r4su/r4su-case-study-beer/
  42. V indexu popularity programovacích jazyků TIOBE překvapilo R, Go, Perl, Scratch a Rust
    https://www.root.cz/zpravicky/v-indexu-popularity-programovacich-jazyku-tiobe-prekvapilo-r-go-perl-scratch-a-rust/
  43. Is R Programming SURGING in Popularity in 2020?
    https://www.youtube.com/watch?v=Duwn-vImyXE
  44. Using the R programming language in Jupyter Notebook
    https://docs.anaconda.com/a­naconda/navigator/tutorial­s/r-lang/
  45. Using R on Jupyter Notebook
    https://dzone.com/articles/using-r-on-jupyternbspnotebook
  46. Graphics, ggplot2
    http://r4stats.com/examples/graphics-ggplot2/
  47. A Practice Data Set
    https://r4stats.wordpress­.com/examples/mydata/
  48. Shiny – galerie projektů
    https://shiny.rstudio.com/gallery/
  49. Seriál Programovací jazyk Julia
    https://www.root.cz/seria­ly/programovaci-jazyk-julia/
  50. Julia (front page)
    http://julialang.org/
  51. Julia – repositář na GitHubu
    https://github.com/JuliaLang/julia
  52. Julia (programming language)
    https://en.wikipedia.org/wi­ki/Julia_%28programming_lan­guage%29
  53. IJulia
    https://github.com/JuliaLan­g/IJulia.jl
  54. Introducing Julia
    https://en.wikibooks.org/wi­ki/Introducing_Julia
  55. Julia: the REPL
    https://en.wikibooks.org/wi­ki/Introducing_Julia/The_REPL
  56. Introducing Julia/Metaprogramming
    https://en.wikibooks.org/wi­ki/Introducing_Julia/Meta­programming
  57. Month of Julia
    https://github.com/DataWo­okie/MonthOfJulia
  58. Learn X in Y minutes (where X=Julia)
    https://learnxinyminutes.com/doc­s/julia/
  59. New Julia language seeks to be the C for scientists
    http://www.infoworld.com/ar­ticle/2616709/application-development/new-julia-language-seeks-to-be-the-c-for-scientists.html
  60. Julia: A Fast Dynamic Language for Technical Computing
    http://karpinski.org/publi­cations/2012/julia-a-fast-dynamic-language
  61. The LLVM Compiler Infrastructure
    http://llvm.org/
  62. Julia: benchmarks
    http://julialang.org/benchmarks/
  63. R Vector
    https://www.datamentor.io/r-programming/vector/
  64. .R File Extension
    https://fileinfo.com/extension/r
  65. Lineární regrese
    https://cs.wikipedia.org/wi­ki/Line%C3%A1rn%C3%AD_regre­se
  66. lm (funkce)
    https://www.rdocumentation­.org/packages/stats/versi­ons/3.6.2/topics/lm
  67. quit (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/quit
  68. c (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/c
  69. help (funkce)
    https://www.rdocumentation­.org/packages/utils/versi­ons/3.6.2/topics/help
  70. Shiny: Introduction to interactive documents
    https://shiny.rstudio.com/ar­ticles/interactive-docs.html
  71. R Release History 1997–2013
    http://timelyportfolio.git­hub.io/rCharts_timeline_r/
  72. R: atomic vectors
    https://renenyffenegger.ch/no­tes/development/languages/R/da­ta-structures/vector/
  73. 11 Best R Programming IDE and editors
    https://www.dunebook.com/best-r-programming-ide/
  74. CRAN – The Comprehensive R Archive Network
    https://cran.r-project.org/
  75. R – Arrays
    https://www.tutorialspoin­t.com/r/r_arrays.htm
  76. Array vs Matrix in R Programming
    https://www.geeksforgeeks.org/array-vs-matrix-in-r-programming/?ref=rp
  77. Online R Language IDE
    https://www.jdoodle.com/execute-r-online/
  78. Execute R Online (R v3.4.1)
    https://www.tutorialspoin­t.com/execute_r_online.php
  79. Snippets: Run any R code you like. There are over twelve thousand R packages preloaded
    https://rdrr.io/snippets/
  80. R Package Documentation
    https://rdrr.io/
  81. Data Reshaping in R – Popular Functions to Organise Data
    https://techvidvan.com/tutorials/data-reshaping-in-r/
  82. What is an R Data Frame?
    https://magoosh.com/data-science/what-is-an-r-data-frame/
  83. What's a data frame?
    https://campus.datacamp.com/cou­rses/free-introduction-to-r/chapter-5-data-frames?ex=1
  84. data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/data.frame
  85. as.data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/as.data.fra­me
  86. table
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/table
  87. Python Pandas – DataFrame
    https://www.tutorialspoin­t.com/python_pandas/python_pan­das_dataframe.htm
  88. The Pandas DataFrame: Make Working With Data Delightful
    https://realpython.com/pandas-dataframe/
  89. Python | Pandas DataFrame
    https://www.geeksforgeeks.org/python-pandas-dataframe/
  90. R – Factors
    https://www.tutorialspoin­t.com/r/r_factors.htm
  91. R – Scatterplots
    https://www.tutorialspoin­t.com/r/r_scatterplots.htm
  92. Quick guide to line types (lty) in R
    https://www.benjaminbell.co­.uk/2018/02/quick-guide-to-line-types-lty-in-r.html
  93. Lattice C (Wikipedia)
    https://en.wikipedia.org/wi­ki/Lattice_C
  94. Lorenz Attractor in R
    https://www.sixhat.net/lorenz-attractor-in-r.html
  95. Small multiple
    https://en.wikipedia.org/wi­ki/Small_multiple
  96. Category:Infographics (infografika)
    https://en.wikipedia.org/wi­ki/Category:Infographics
  97. Trellis plots (pro Python)
    https://subscription.packtpub­.com/book/big_data_and_bu­siness_intelligence/9781784390150/4/ch04l­vl1sec41/trellis-plots
  98. Trellis (architecture)
    https://en.wikipedia.org/wi­ki/Trellis_(architecture)
  99. Izobara (meteorologie)
    https://cs.wikipedia.org/wi­ki/Izobara_(meteorologie)
  100. How to Create a Lattice Plot in R
    https://www.dummies.com/pro­gramming/r/how-to-create-a-lattice-plot-in-r/
  101. Density estimation
    https://en.wikipedia.org/wi­ki/Density_estimation
  102. Sedm smrtelných statistických hříchů
    http://dfens-cz.com/sedm-smrtelnych-statistickych-hrichu/
  103. Spurious correlations
    https://tylervigen.com/spurious-correlations

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.