Zobrazení výsledků - heatmapa
K dispozici máme tři datové soubory (klikněte na název pro stažení souboru):
uroda.txt - tabulka s hektarovými výnosy 14 plodin ve 14 krajech České republiky
kraje.txt - tabulka krajů, jejich velikosti v hektarech, populace, jestli se nacházejí na hranici ČR a do kterého regionu patří
plodiny.txt - tabulka obsahující název každé plodiny, její kategorizaci dle typu a výživnou hodnotu
Prvním krokem každé analýzy je obvykle načtení dat. To provedme pro každou tabulku zvlášť, s pomocí funkce read.delim(), pro zachování české diakritiky použijeme argument encoding:
> uroda <- read.delim("uroda.txt", header=TRUE, row.names=1)
> kraje <- read.delim("kraje.txt", header=TRUE, row.names=1, encoding="UTF-8")
> plodiny <- read.delim("plodiny.txt", header=TRUE, row.names=1, encoding="UTF-8")
> rownames(uroda)<-kraje$Name
Využívame výsledky shlukové analýzy z predešlých kapitol.
Velmi užitečným nástrojem pro zobrazení výsledků shlukování je heatmapa, která zobrazí dvourozměrně hodnoty výnosů plodin v krajích a zároveň je seřadí podle výsledků shlukování. Dostupných je několik funkcí: heatmap(), nebo heatmap.2() z balíku gplots.
Funkce heatmap() má tuto strukturu a argumenty:
heatmap(x, Rowv, Colv, ColSideColors, labRow, cexRow, col, …)
Vybrané argumenty:
x – numerická matice
Rowv, Colv – dendrogram pro řádky nebo sloupce
ColSideColors – barevné označení sloupců (podobně pro řádky RowSideColors)
labRow – textové popisky řádků (pro sloupce labCol)
cexRow – relativní velikost písma pro popisky řádků (pro sloupce cexCol)
col – barevná škála
Nastavíme barevnou škálu od modré přes černou až k červené barvě. Modrá barva značí málo výnosné plodiny a červená velmi výnosné plodiny. Černá barva znamená průměrný výnos.
> barvy <- colorRampPalette(c("blue", "black","red"))(15)
Funkce heatmap() automaticky provádí:
> heatmap(as.matrix(uroda),col=barvy)
Pokud chceme vytvořit heatmapu na základě našeho vlastního shlukování, musíme definovat parametr Rowv (pro dendrogram řádků - míst) a Colv (pro dendrogram sloupců - plodin).
Pro kraje použijeme dendrogram ze shlukování na Spearmanově korelaci:
> dendr.hclust.kraj.spear.avg <- as.dendrogram(hclust.kraj.spear.avg)
Pro plodiny použijeme dendrogram ze shlukování na euklidovské vzdálenosti:
> dendr.hclust.plodina.eucl.avg <- as.dendrogram(hclust.plodina.eucl.avg, labels=group)
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.eucl.avg, Rowv= dendr.hclust.kraj.spear.avg)
Zadáme dendrogram z korelací i u plodin:
> dendr.hclust.plodina.spear.avg <- as.dendrogram(hclust.plodina.spear.avg, labels=group)
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg, Rowv= dendr.hclust.kraj.spear.avg)
Pokud chceme vidět názvy plodin (plodiny$název), zadefinujeme parametr labCol a zvětšíme písmo ve sloupcích pomocí parametru cexCo. Dále pro zýraznění rozdílů mezi kraji použijeme škálovaní slopcu:
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
Rowv= dendr.hclust.kraj.spear.avg,
labCol=plodiny$název, cexCol=1.3, scale="col")
Pokud chceme shlukování řádků nebo sloupců, zadáme hodnotu NA do parametrů Colv nebo Rowv
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
Rowv= NA, labCol=plodiny$názov, cexCol=1.3, scale="col")
Heatmapu uložíme např. funkcí png() v definované velikosti:
> png("heatmapa7.png", height=1200, width=600)
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
Rowv= dendr.hclust.kraj.spear.avg,
labCol=plodiny$názov, cexCol=1.3)
> dev.off()
Vzhledem k tomu, že heatmapa této funkce je definovaná přes layout() a ten není možné měnit, není tedy možné ani její zvětšování. Pokud se vám nechce probírat zdrojovým kódem, zkuste funkci heatmap.2() z balíku gplots, ta už má více možností.