Chapter 11 Visualization

XMAS 2.0 provides mulitple functions for visualization. For instance, using plot_volcano to display the results of differential analysis.

Outline of this Chapter:

11.1 Loading Packages

library(XMAS2)
library(dplyr)
library(tibble)
library(phyloseq)
library(ggplot2)
library(ggpubr)

11.2 Importing Data

data("amplicon_ps")
amplicon_ps_rarefy <- norm_rarefy(object = amplicon_ps, 
                                  size = 1114)
amplicon_ps_rarefy
## phyloseq-class experiment-level object
## otu_table()   OTU Table:         [ 2308 taxa and 34 samples ]
## sample_data() Sample Data:       [ 34 samples by 8 sample variables ]
## tax_table()   Taxonomy Table:    [ 2308 taxa by 7 taxonomic ranks ]
## phy_tree()    Phylogenetic Tree: [ 2308 tips and 2306 internal nodes ]

11.3 plot_boxplot

  • calculate alpha diversity
dat_alpha <- run_alpha_diversity(ps = amplicon_ps_rarefy, 
                                 measures = c("Shannon", "Chao1", "Observed"))
head(dat_alpha)
##   TempRowNames SampleType Year Month Day Subject ReportedAntibioticUsage DaysSinceExperimentStart         Description Observed
## 1       L1S140        gut 2008    10  28       2                     Yes                        0   2_Fece_10_28_2008      161
## 2       L1S208        gut 2009     1  20       2                      No                       84    2_Fece_1_20_2009      183
## 3         L1S8        gut 2008    10  28       1                     Yes                        0   1_Fece_10_28_2008      112
## 4       L1S281        gut 2009     4  14       2                      No                      168    2_Fece_4_14_2009      212
## 5       L3S242 right palm 2008    10  28       1                     Yes                        0 1_R_Palm_10_28_2008      120
## 6       L2S309  left palm 2009     1  20       2                      No                       84  2_L_Palm_1_20_2009      296
##      Chao1  se.chao1  Shannon
## 1 332.7308  50.17139 3.149765
## 2 365.0000  50.23137 3.617229
## 3 303.1538  69.80534 2.817767
## 4 587.9130 102.79585 3.892763
## 5 278.8824  54.21486 2.911609
## 6 560.0526  55.47859 4.494509

plot_boxplot has many parameters, and help you enjoy it.

  • single measure
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = FALSE)
boxplot(single measure)

Figure 11.1: boxplot(single measure)

  • single measure with significant results
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE)
boxplot(single measure with significant results)

Figure 11.2: boxplot(single measure with significant results)

  • single measure with significant results of pairwises
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), 
                             c("gut", "tongue")))
boxplot(single measure with significant results of pairwises)

Figure 11.3: boxplot(single measure with significant results of pairwises)

  • single measure with significant results of pairwises and outlier
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), 
                             c("gut", "tongue")),
             outlier = TRUE)
boxplot(single measure with significant results of pairwises and outlier)

Figure 11.4: boxplot(single measure with significant results of pairwises and outlier)

  • single measure with significant results of ref_group
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             ref_group = "gut")
boxplot(single measure with significant results of ref_group)

Figure 11.5: boxplot(single measure with significant results of ref_group)

  • multiple measures
plot_boxplot(data = dat_alpha,
             y_index = c("Shannon", "Chao1", "Observed"),
             group = "SampleType",
             group_names = c("gut", "right palm", "tongue"),
             group_color = c("red", "green", "blue"),
             ref_group = "gut",
             method = "wilcox.test",
             outlier = TRUE)
boxplot(multiple measure with group number)

Figure 11.6: boxplot(multiple measure with group number)

  • show group_number in the x-axis break
plot_boxplot(data = dat_alpha,
             y_index = c("Shannon", "Chao1", "Observed"),
             group = "SampleType",
             group_names = c("gut", "right palm", "tongue"),
             group_color = c("red", "green", "blue"),
             do_test = TRUE,
             method = "wilcox.test",
             group_number = TRUE)
boxplot(group_number)

Figure 11.7: boxplot(group_number)

11.4 plot_barplot

plot_barplot has many parameters, and help you enjoy it.

  • single measure
plot_barplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = FALSE)
barplot(single measure)

Figure 11.8: barplot(single measure)

  • single measure with significant results
plot_barplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE)
barplot(single measure with significant results)

Figure 11.9: barplot(single measure with significant results)

  • single measure with significant results of pairwises
plot_barplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), c("gut", "tongue")))
barplot(single measure with significant results of pairwises)

Figure 11.10: barplot(single measure with significant results of pairwises)

  • single measure with significant results of ref_group
plot_barplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             ref_group = "gut")
barplot(single measure with significant results of ref_group)

Figure 11.11: barplot(single measure with significant results of ref_group)

  • multiple index
plot_barplot(data = dat_alpha,
             y_index = c("Shannon", "Chao1", "Observed"),
             group = "SampleType",
             do_test = TRUE,
             method = "wilcox.test")
barplot(multiple index)

Figure 11.12: barplot(multiple index)

  • show group_number in the x-axis break
plot_barplot(data = dat_alpha,
             y_index = c("Shannon", "Chao1", "Observed"),
             group = "SampleType",
             group_names = c("gut", "right palm", "tongue"),
             group_color = c("red", "green", "blue"),
             do_test = TRUE,
             method = "wilcox.test",
             group_number = TRUE)
barplot(group_number)

Figure 11.13: barplot(group_number)

11.5 plot_dotplot

plot_dotplot has many parameters, and help you enjoy it.

  • single measure
plot_dotplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = FALSE)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(single measure)

Figure 11.14: dotplot(single measure)

  • single measure with significant results
plot_dotplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(single measure with significant results)

Figure 11.15: dotplot(single measure with significant results)

  • single measure with significant results of pairwises
plot_dotplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), 
                             c("gut", "tongue")))
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(single measure with significant results of pairwises)

Figure 11.16: dotplot(single measure with significant results of pairwises)

  • single measure with significant results of ref_group
plot_dotplot(
    data = dat_alpha,
    y_index = "Shannon",
    group = "SampleType",
    do_test = TRUE,
    ref_group = "gut")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(single measure with significant results of ref_group)

Figure 11.17: dotplot(single measure with significant results of ref_group)

  • dot size and median size
plot_dotplot(
    data = dat_alpha,
    y_index = "Shannon",
    group = "SampleType",
    do_test = TRUE,
    ref_group = "gut",
    dotsize = 0.5,
    mediansize = 2)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(dot size and median size)

Figure 11.18: dotplot(dot size and median size)

  • multiple index
plot_dotplot(
    data = dat_alpha,
    y_index = c("Shannon", "Chao1", "Observed"),
    group = "SampleType",
    do_test = TRUE,
    method = "wilcox.test")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(multiple index)

Figure 11.19: dotplot(multiple index)

  • multiple index with errorbar
plot_dotplot(
    data = dat_alpha,
    y_index = c("Shannon", "Chao1", "Observed"),
    group = "SampleType",
    do_test = TRUE,
    show_type = "errorbar",
    method = "wilcox.test")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(multiple index errorbar)

Figure 11.20: dotplot(multiple index errorbar)

  • show group_number in the x-axis break
plot_dotplot(data = dat_alpha,
             y_index = c("Shannon", "Chao1", "Observed"),
             group = "SampleType",
             group_names = c("gut", "right palm", "tongue"),
             group_color = c("red", "green", "blue"),
             show_type = "errorbar",
             do_test = TRUE,
             method = "wilcox.test",
             group_number = TRUE)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
dotplot(group_number)

Figure 11.21: dotplot(group_number)

11.6 plot_correlation_boxplot

Help you enjoy plot_correlation_boxplot.

plot_correlation_boxplot(
    data = dat_alpha,
    x_index = "Chao1",
    y_index = "Shannon",
    group = "SampleType")
correlation with boxplot

Figure 11.22: correlation with boxplot

11.7 plot_correlation_density

Help you enjoy plot_correlation_density.

plot_correlation_density(
    data = dat_alpha,
    x_index = "Chao1",
    y_index = "Shannon",
    group = "SampleType")
correlation with density

Figure 11.23: correlation with density

11.8 plot_Ordination

plot_Ordination provides too many parameters for users to display the ordination results by using ggplot2 format. Here is the ordinary pattern.

data("dada2_ps")

# step1: Removing samples of specific group in phyloseq-class object
dada2_ps_remove_BRS <- get_GroupPhyloseq(
                     ps = dada2_ps,
                     group = "Group",
                     group_names = "QC")

# step2: Rarefying counts in phyloseq-class object
dada2_ps_rarefy <- norm_rarefy(object = dada2_ps_remove_BRS,
                               size = 51181)

# step3: Extracting specific taxa phyloseq-class object 
dada2_ps_rare_genus <- summarize_taxa(ps = dada2_ps_rarefy, 
                                      taxa_level = "Genus", 
                                      absolute = TRUE)

# step4: Aggregating low relative abundance or unclassified taxa into others
# dada2_ps_genus_LRA <- summarize_LowAbundance_taxa(ps = dada2_ps_rare_genus, 
#                                                   cutoff = 10, 
#                                                   unclass = TRUE)

# step4: Filtering the low relative abundance or unclassified taxa by the threshold
dada2_ps_genus_filter <- run_filter(ps = dada2_ps_rare_genus, 
                                    cutoff = 10, 
                                    unclass = TRUE)

# step5: Trimming the taxa with low occurrence less than threshold
dada2_ps_genus_filter_trim <- run_trim(object = dada2_ps_genus_filter, 
                                       cutoff = 0.2, 
                                       trim = "feature")
dada2_ps_genus_filter_trim
## phyloseq-class experiment-level object
## otu_table()   OTU Table:         [ 100 taxa and 23 samples ]
## sample_data() Sample Data:       [ 23 samples by 1 sample variables ]
## tax_table()   Taxonomy Table:    [ 100 taxa by 6 taxonomic ranks ]
ordination_PCA <- run_ordination(
                       ps = dada2_ps_genus_filter_trim,
                       group = "Group",
                       method = "PCA")

names(ordination_PCA)
## [1] "fit"           "dat"           "explains"      "eigvalue"      "PERMANOVA"     "axis_taxa_cor"
  • Ordinary pattern
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group")
plot_Ordination (Ordinary pattern)

Figure 11.24: plot_Ordination (Ordinary pattern)

  • plot with SampleID and setting group colors
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse",
                sample = TRUE)
plot_Ordination (Ordinary pattern with SampleID)

Figure 11.25: plot_Ordination (Ordinary pattern with SampleID)

  • ellipse with 95% confidence interval
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_CI",
                sample = TRUE)
plot_Ordination (ellipse with 95% confidence interval)

Figure 11.26: plot_Ordination (ellipse with 95% confidence interval)

  • ellipse with groups
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_groups",
                sample = TRUE)
plot_Ordination (ellipse with groups)

Figure 11.27: plot_Ordination (ellipse with groups)

  • ellipse with border line
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_line",
                sample = TRUE)
plot_Ordination (ellipse with border line)

Figure 11.28: plot_Ordination (ellipse with border line)

  • plot with SampleID and sideboxplot and setting group colors
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse",
                sidelinechart = FALSE,
                sideboxplot = TRUE,
                sample = TRUE)
plot_Ordination (Ordinary pattern with SampleID sideboxplot)

Figure 11.29: plot_Ordination (Ordinary pattern with SampleID sideboxplot)

  • plot with SampleID and sideboxplot and setting group colors 2
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_CI",
                sidelinechart = FALSE,
                sideboxplot = TRUE,
                sample = TRUE)
plot_Ordination (ellipse_CI with SampleID sideboxplot)

Figure 11.30: plot_Ordination (ellipse_CI with SampleID sideboxplot)

  • plot with SampleID and sideboxplot and setting group colors 3
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_groups",
                sidelinechart = FALSE,
                sideboxplot = TRUE,
                sample = TRUE)
plot_Ordination (ellipse_groups with SampleID sideboxplot)

Figure 11.31: plot_Ordination (ellipse_groups with SampleID sideboxplot)

  • plot with SampleID and sideboxplot and setting group colors 4
plot_Ordination(ResultList = ordination_PCA, 
                group = "Group", 
                group_names = c("AA", "BB"),
                group_color = c("blue", "red"),
                circle_type = "ellipse_line",
                sidelinechart = FALSE,
                sideboxplot = TRUE,
                sample = TRUE)
plot_Ordination (ellipse_line with SampleID sideboxplot)

Figure 11.32: plot_Ordination (ellipse_line with SampleID sideboxplot)

  • plot with SampleID and sideboxplot and setting group colors and shape
data("amplicon_ps")
amplicon_ps_genus <- summarize_taxa(ps = amplicon_ps, 
                                    taxa_level = "Genus")
amplicon_res_ordination <- run_ordination(
                              ps = amplicon_ps_genus,
                              group = "SampleType",
                              method = "PCoA")

plot_Ordination(ResultList = amplicon_res_ordination, 
                group = "SampleType",
                shape_column = "ReportedAntibioticUsage",
                shape_values = c(16, 17),
                circle_type = "ellipse_line",
                sidelinechart = FALSE,
                sideboxplot = TRUE,
                sample = TRUE)
plot_Ordination (ellipse_line with SampleID sideboxplot)

Figure 11.33: plot_Ordination (ellipse_line with SampleID sideboxplot)

11.9 plot_ggbiplot

  • biplot with topN dominant taxa
plot_ggbiplot(ResultList = ordination_PCA,
              group = "Group",
              group_color = c("blue", "red"),
              topN = 5,
              ellipse = TRUE,
              labels = "SampleID")
plot_ggbiplot (biplot)

Figure 11.34: plot_ggbiplot (biplot)

11.10 plot_corrplot

dada2_beta <- run_beta_diversity(ps = dada2_ps_rarefy, 
                                 method = "bray")
plot_distance_corrplot(datMatrix = dada2_beta$BetaDistance)
plot_corrplot (distance)

Figure 11.35: plot_corrplot (distance)

11.11 plot_2DA_venn

da_wilcox <- run_wilcox(
                ps = dada2_ps_genus_filter_trim,
                group = "Group",
                group_names = c("AA", "BB"))

da_ttest <- run_ttest(
               ps = dada2_ps_genus_filter_trim,
               group = "Group",
               group_names = c("AA", "BB"))

DA_venn_res <- plot_2DA_venn(
                   daTest1 = da_wilcox,
                   daTest2 = da_ttest,
                   datType1 = "AA vs BB(wilcox)",
                   datType2 = "AA vs BB(t-test)",
                   group_names = c("AA", "BB"),
                   Pvalue_name = "Pvalue",
                   logFc_name1 = "Log2FoldChange (Rank)\nAA_vs_BB",
                   logFc_name2 = "Log2FoldChange (Mean)\nAA_vs_BB",
                   Pvalue_cutoff = 0.8,
                   logFC_cutoff = 0.2)
DA_venn_res$pl
plot_2DA_venn (wilcox vs t_test)

Figure 11.36: plot_2DA_venn (wilcox vs t_test)

11.12 plot the DA results from the significant taxa by double barplot

data("amplicon_ps")
DA_res <- run_wilcox(
              ps = amplicon_ps, 
              taxa_level = "Family", 
              group = "SampleType", 
              group_names = c("tongue", "gut"))

plot_double_barplot(data = DA_res,
              x_index = "Log2FoldChange (Rank)\ntongue_vs_gut",
              x_index_cutoff = 1,
              y_index = "AdjustedPvalue",
              y_index_cutoff = 0.05)
double barplot for DA results

Figure 11.37: double barplot for DA results

11.13 plot_stacked_bar_XIVZ

  • Minimum usage: plot in relative abundance
plot_stacked_bar_XIVZ(phyloseq = dada2_ps_rarefy, 
                      level = "Family")
plot_stacked_bar_XIVZ (test1)

Figure 11.38: plot_stacked_bar_XIVZ (test1)

  • Set feature parameter to show feature information
plot_stacked_bar_XIVZ(phyloseq = dada2_ps_rarefy, 
                 level = "Family",
                 feature = "Group")
plot_stacked_bar_XIVZ (test2)

Figure 11.39: plot_stacked_bar_XIVZ (test2)

  • Pass ordered sample names to order parameter to plot in specific order
metadata <- phyloseq::sample_data(dada2_ps_rarefy) %>% 
  data.frame() %>%
  dplyr::arrange(Group)
plot_stacked_bar_XIVZ(phyloseq = dada2_ps_rarefy, 
                 level = "Family",
                 feature = "Group",
                 order = rownames(metadata))
plot_stacked_bar_XIVZ (test3)

Figure 11.40: plot_stacked_bar_XIVZ (test3)

  • Use facet_wrap(vars(), scale=“free”) funciton to facet stacked barplot
plot_stacked_bar_XIVZ(phyloseq = dada2_ps_rarefy, 
                 level = "Family", 
                 relative_abundance = TRUE, 
                 order = rownames(metadata)) + 
  facet_wrap(vars(Group), scale="free")
plot_stacked_bar_XIVZ (test4)

Figure 11.41: plot_stacked_bar_XIVZ (test4)

11.14 plot_StackBarPlot

plot_StackBarPlot provides too many parameters for users to display the Stacked barplot of microbial composition by using ggplot2 format. Here is the ordinary pattern. More details to see help(plot_StackBarPlot).

  • Ordinary pattern
plot_StackBarPlot(ps = amplicon_ps_rarefy, 
                  taxa_level="Phylum")
plot_StackBarPlot(Ordinary pattern)

Figure 11.42: plot_StackBarPlot(Ordinary pattern)

  • Metadata with SampleType phenotype
plot_StackBarPlot(
        ps = amplicon_ps_rarefy,
        taxa_level = "Phylum",
        group = "SampleType")
## [1] "This palatte have 20 colors!"
plot_StackBarPlot (Metadata with group)

Figure 11.43: plot_StackBarPlot (Metadata with group)

  • Metadata with SampleType phenotype in cluster mode
plot_StackBarPlot(
        ps = amplicon_ps_rarefy,
        taxa_level = "Phylum",
        group = "SampleType",
        cluster = TRUE)
## [1] "This palatte have 20 colors!"
plot_StackBarPlot (Metadata with group in cluster mode)

Figure 11.44: plot_StackBarPlot (Metadata with group in cluster mode)

  • Metadata with SampleType phenotype in facet
plot_StackBarPlot(
        ps = amplicon_ps_rarefy,
        taxa_level = "Phylum",
        group = "SampleType",
        facet = TRUE)
plot_StackBarPlot (Metadata with group in facet)

Figure 11.45: plot_StackBarPlot (Metadata with group in facet)

  • Metadata with two groups to display samples
plot_StackBarPlot(
  ps = amplicon_ps_rarefy,
  taxa_level = "Order",
  group = "SampleType",
  subgroup = "Year")
## [1] "This palatte have 19 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
plot_StackBarPlot (Metadata with two groups ot display samples)

Figure 11.46: plot_StackBarPlot (Metadata with two groups ot display samples)

  • Metadata with three groups to display samples
plot_StackBarPlot(
  ps = amplicon_ps_rarefy,
  taxa_level = "Order",
  group = "SampleType",
  subgroup = c("Year", "Month"))
## [1] "This palatte have 19 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
## [1] "This palatte have 20 colors!"
plot_StackBarPlot (Metadata with three groups ot display samples)

Figure 11.47: plot_StackBarPlot (Metadata with three groups ot display samples)

  • Order SampleID by orderSample parameter
plot_StackBarPlot(
  ps = amplicon_ps_rarefy,
  taxa_level = "Order",
  group = "SampleType",
  orderSample = phyloseq::sample_names(amplicon_ps)[1:10])
## [1] "This palatte have 20 colors!"
Stacked barplot with Ordered Samples

Figure 11.48: Stacked barplot with Ordered Samples

11.15 Color Palettes

11.15.1 Wes Anderson Palettes

Wes Anderson Palettes is from wesanderson package and we have integrated it into XMAS2.0.

data("amplicon_ps")
dat_alpha <- run_alpha_diversity(ps = amplicon_ps, measures = c("Shannon", "Chao1"))

# origin
pl_origin <- plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), c("gut", "left palm")),
             method = "wilcox.test")

# Wes Anderson Palettes
pal <- wes_palette(name = "GrandBudapest1", 4, type = "discrete")
pl_wes <- plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             group_color = pal,
             do_test = TRUE,
             cmp_list = list(c("gut", "right palm"), c("gut", "left palm")),
             method = "wilcox.test")

cowplot::plot_grid(pl_origin, pl_wes,
                   align = "hv",
                   labels = c("Origin", "Wes Anderson"))
Wes Anderson Palettes

Figure 11.49: Wes Anderson Palettes

11.15.2 useMyCol

pal <- useMyCol(platte = "stallion", n = length(unique(dat_alpha$SampleType)))
## [1] "This palatte have 20 colors!"
plot_boxplot(data = dat_alpha,
             y_index = "Shannon",
             group = "SampleType",
             do_test = TRUE,
             group_color = pal,
             cmp_list = list(c("gut", "right palm"), c("gut", "left palm")),
             method = "wilcox.test")
useMyCol Palettes

Figure 11.50: useMyCol Palettes

11.16 Ordination plots with ggplot2

11.16.1 principal components analysis with the iris data set

ord <- prcomp(iris[, 1:4])

ggord(ord, iris$Species, cols = c('purple', 'orange', 'blue')) + 
  scale_shape_manual('Groups', values = c(1, 2, 3)) + 
  theme_classic() + 
  theme(legend.position = 'top')
principal components analysis

Figure 11.51: principal components analysis

11.16.2 multiple correspondence analysis with the tea dataset

data(tea, package = 'FactoMineR')
tea <- tea[, c('Tea', 'sugar', 'price', 'age_Q', 'sex')]

ord <- FactoMineR::MCA(tea[, -1], graph = FALSE)

ggord(ord, tea$Tea, parse = FALSE) # use parse = FALSE for labels with non alphanumeric characters
multiple correspondence analysis

Figure 11.52: multiple correspondence analysis

11.16.3 linear discriminant analysis

ord <- MASS::lda(Species ~ ., iris, prior = rep(1, 3)/3)

ggord(ord, iris$Species)
linear discriminant analysis

Figure 11.53: linear discriminant analysis

11.17 Systematic Information

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.1.2 (2021-11-01)
##  os       macOS Monterey 12.2.1
##  system   x86_64, darwin17.0
##  ui       RStudio
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Asia/Shanghai
##  date     2022-10-08
##  rstudio  2022.07.1+554 Spotted Wakerobin (desktop)
##  pandoc   2.18 @ /Applications/RStudio.app/Contents/MacOS/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
##  package              * version  date (UTC) lib source
##  abind                  1.4-5    2016-07-21 [1] CRAN (R 4.1.0)
##  ade4                   1.7-18   2021-09-16 [1] CRAN (R 4.1.0)
##  ALDEx2                 1.26.0   2021-10-26 [1] Bioconductor
##  annotate               1.72.0   2021-10-26 [1] Bioconductor
##  AnnotationDbi          1.56.2   2021-11-09 [1] Bioconductor
##  ape                  * 5.6-2    2022-03-02 [1] CRAN (R 4.1.2)
##  askpass                1.1      2019-01-13 [1] CRAN (R 4.1.0)
##  assertthat             0.2.1    2019-03-21 [1] CRAN (R 4.1.0)
##  backports              1.4.1    2021-12-13 [1] CRAN (R 4.1.0)
##  base64enc              0.1-3    2015-07-28 [1] CRAN (R 4.1.0)
##  bayesm                 3.1-4    2019-10-15 [1] CRAN (R 4.1.0)
##  Biobase              * 2.54.0   2021-10-26 [1] Bioconductor
##  BiocGenerics         * 0.40.0   2021-10-26 [1] Bioconductor
##  BiocParallel           1.28.3   2021-12-09 [1] Bioconductor
##  biomformat             1.22.0   2021-10-26 [1] Bioconductor
##  Biostrings             2.62.0   2021-10-26 [1] Bioconductor
##  bit                    4.0.4    2020-08-04 [1] CRAN (R 4.1.0)
##  bit64                  4.0.5    2020-08-30 [1] CRAN (R 4.1.0)
##  bitops                 1.0-7    2021-04-24 [1] CRAN (R 4.1.0)
##  blob                   1.2.2    2021-07-23 [1] CRAN (R 4.1.0)
##  bookdown               0.27     2022-06-14 [1] CRAN (R 4.1.2)
##  brio                   1.1.3    2021-11-30 [1] CRAN (R 4.1.0)
##  broom                  1.0.0    2022-07-01 [1] CRAN (R 4.1.2)
##  bslib                  0.3.1    2021-10-06 [1] CRAN (R 4.1.0)
##  cachem                 1.0.6    2021-08-19 [1] CRAN (R 4.1.0)
##  callr                  3.7.0    2021-04-20 [1] CRAN (R 4.1.0)
##  car                    3.0-12   2021-11-06 [1] CRAN (R 4.1.0)
##  carData                3.0-5    2022-01-06 [1] CRAN (R 4.1.2)
##  caTools                1.18.2   2021-03-28 [1] CRAN (R 4.1.0)
##  checkmate              2.0.0    2020-02-06 [1] CRAN (R 4.1.0)
##  class                  7.3-20   2022-01-13 [1] CRAN (R 4.1.2)
##  classInt               0.4-3    2020-04-07 [1] CRAN (R 4.1.0)
##  cli                    3.3.0    2022-04-25 [1] CRAN (R 4.1.2)
##  cluster                2.1.2    2021-04-17 [1] CRAN (R 4.1.2)
##  codetools              0.2-18   2020-11-04 [1] CRAN (R 4.1.2)
##  coin                   1.4-2    2021-10-08 [1] CRAN (R 4.1.0)
##  colorspace             2.0-3    2022-02-21 [1] CRAN (R 4.1.2)
##  compositions           2.0-4    2022-01-05 [1] CRAN (R 4.1.2)
##  conflicted           * 1.1.0    2021-11-26 [1] CRAN (R 4.1.0)
##  corrplot               0.92     2021-11-18 [1] CRAN (R 4.1.0)
##  cowplot                1.1.1    2020-12-30 [1] CRAN (R 4.1.0)
##  crayon                 1.5.0    2022-02-14 [1] CRAN (R 4.1.2)
##  crosstalk              1.2.0    2021-11-04 [1] CRAN (R 4.1.0)
##  data.table             1.14.2   2021-09-27 [1] CRAN (R 4.1.0)
##  DBI                    1.1.2    2021-12-20 [1] CRAN (R 4.1.0)
##  DelayedArray           0.20.0   2021-10-26 [1] Bioconductor
##  DEoptimR               1.0-10   2022-01-03 [1] CRAN (R 4.1.2)
##  desc                   1.4.1    2022-03-06 [1] CRAN (R 4.1.2)
##  DESeq2                 1.34.0   2021-10-26 [1] Bioconductor
##  devtools             * 2.4.3    2021-11-30 [1] CRAN (R 4.1.0)
##  digest                 0.6.29   2021-12-01 [1] CRAN (R 4.1.0)
##  dplyr                * 1.0.8    2022-02-08 [1] CRAN (R 4.1.2)
##  DT                     0.21     2022-02-26 [1] CRAN (R 4.1.2)
##  e1071                  1.7-9    2021-09-16 [1] CRAN (R 4.1.0)
##  edgeR                  3.36.0   2021-10-26 [1] Bioconductor
##  ellipsis               0.3.2    2021-04-29 [1] CRAN (R 4.1.0)
##  evaluate               0.15     2022-02-18 [1] CRAN (R 4.1.2)
##  FactoMineR             2.4      2020-12-11 [1] CRAN (R 4.1.0)
##  fansi                  1.0.2    2022-01-14 [1] CRAN (R 4.1.2)
##  farver                 2.1.0    2021-02-28 [1] CRAN (R 4.1.0)
##  fastmap                1.1.0    2021-01-25 [1] CRAN (R 4.1.0)
##  flashClust             1.01-2   2012-08-21 [1] CRAN (R 4.1.0)
##  foreach                1.5.2    2022-02-02 [1] CRAN (R 4.1.2)
##  foreign                0.8-82   2022-01-13 [1] CRAN (R 4.1.2)
##  forestplot             2.0.1    2021-09-03 [1] CRAN (R 4.1.0)
##  formatR                1.11     2021-06-01 [1] CRAN (R 4.1.0)
##  Formula                1.2-4    2020-10-16 [1] CRAN (R 4.1.0)
##  fs                     1.5.2    2021-12-08 [1] CRAN (R 4.1.0)
##  futile.logger        * 1.4.3    2016-07-10 [1] CRAN (R 4.1.0)
##  futile.options         1.0.1    2018-04-20 [1] CRAN (R 4.1.0)
##  genefilter             1.76.0   2021-10-26 [1] Bioconductor
##  geneplotter            1.72.0   2021-10-26 [1] Bioconductor
##  generics               0.1.2    2022-01-31 [1] CRAN (R 4.1.2)
##  GenomeInfoDb         * 1.30.1   2022-01-30 [1] Bioconductor
##  GenomeInfoDbData       1.2.7    2022-03-09 [1] Bioconductor
##  GenomicRanges        * 1.46.1   2021-11-18 [1] Bioconductor
##  ggiraph                0.8.2    2022-02-22 [1] CRAN (R 4.1.2)
##  ggiraphExtra           0.3.0    2020-10-06 [1] CRAN (R 4.1.2)
##  ggplot2              * 3.3.5    2021-06-25 [1] CRAN (R 4.1.0)
##  ggpubr               * 0.4.0    2020-06-27 [1] CRAN (R 4.1.0)
##  ggrepel                0.9.1    2021-01-15 [1] CRAN (R 4.1.0)
##  ggsci                  2.9      2018-05-14 [1] CRAN (R 4.1.0)
##  ggsignif               0.6.3    2021-09-09 [1] CRAN (R 4.1.0)
##  ggVennDiagram          1.2.1    2022-04-13 [1] Github (gaospecial/ggVennDiagram@db6742d)
##  glmnet                 4.1-3    2021-11-02 [1] CRAN (R 4.1.0)
##  glue                 * 1.6.2    2022-02-24 [1] CRAN (R 4.1.2)
##  Gmisc                * 3.0.0    2022-01-03 [1] CRAN (R 4.1.2)
##  gplots                 3.1.1    2020-11-28 [1] CRAN (R 4.1.0)
##  gridExtra              2.3      2017-09-09 [1] CRAN (R 4.1.0)
##  gtable                 0.3.0    2019-03-25 [1] CRAN (R 4.1.0)
##  gtools                 3.9.2    2021-06-06 [1] CRAN (R 4.1.0)
##  highr                  0.9      2021-04-16 [1] CRAN (R 4.1.0)
##  Hmisc                  4.6-0    2021-10-07 [1] CRAN (R 4.1.0)
##  hms                    1.1.1    2021-09-26 [1] CRAN (R 4.1.0)
##  htmlTable            * 2.4.0    2022-01-04 [1] CRAN (R 4.1.2)
##  htmltools              0.5.2    2021-08-25 [1] CRAN (R 4.1.0)
##  htmlwidgets            1.5.4    2021-09-08 [1] CRAN (R 4.1.0)
##  httr                   1.4.2    2020-07-20 [1] CRAN (R 4.1.0)
##  igraph                 1.2.11   2022-01-04 [1] CRAN (R 4.1.2)
##  insight                0.17.0   2022-03-29 [1] CRAN (R 4.1.2)
##  IRanges              * 2.28.0   2021-10-26 [1] Bioconductor
##  iterators              1.0.14   2022-02-05 [1] CRAN (R 4.1.2)
##  jpeg                   0.1-9    2021-07-24 [1] CRAN (R 4.1.0)
##  jquerylib              0.1.4    2021-04-26 [1] CRAN (R 4.1.0)
##  jsonlite               1.8.0    2022-02-22 [1] CRAN (R 4.1.2)
##  kableExtra             1.3.4    2021-02-20 [1] CRAN (R 4.1.2)
##  KEGGREST               1.34.0   2021-10-26 [1] Bioconductor
##  KernSmooth             2.23-20  2021-05-03 [1] CRAN (R 4.1.2)
##  knitr                  1.39     2022-04-26 [1] CRAN (R 4.1.2)
##  labeling               0.4.2    2020-10-20 [1] CRAN (R 4.1.0)
##  lambda.r               1.2.4    2019-09-18 [1] CRAN (R 4.1.0)
##  lattice              * 0.20-45  2021-09-22 [1] CRAN (R 4.1.2)
##  latticeExtra           0.6-29   2019-12-19 [1] CRAN (R 4.1.0)
##  leaps                  3.1      2020-01-16 [1] CRAN (R 4.1.0)
##  libcoin                1.0-9    2021-09-27 [1] CRAN (R 4.1.0)
##  lifecycle              1.0.1    2021-09-24 [1] CRAN (R 4.1.0)
##  limma                  3.50.1   2022-02-17 [1] Bioconductor
##  locfit                 1.5-9.5  2022-03-03 [1] CRAN (R 4.1.2)
##  LOCOM                  1.1      2022-08-05 [1] Github (yijuanhu/LOCOM@c181e0f)
##  lubridate              1.8.0    2021-10-07 [1] CRAN (R 4.1.0)
##  magrittr             * 2.0.2    2022-01-26 [1] CRAN (R 4.1.2)
##  MASS                   7.3-55   2022-01-13 [1] CRAN (R 4.1.2)
##  Matrix                 1.4-0    2021-12-08 [1] CRAN (R 4.1.0)
##  MatrixGenerics       * 1.6.0    2021-10-26 [1] Bioconductor
##  matrixStats          * 0.61.0   2021-09-17 [1] CRAN (R 4.1.0)
##  mbzinb                 0.2      2022-03-16 [1] local
##  memoise                2.0.1    2021-11-26 [1] CRAN (R 4.1.0)
##  metagenomeSeq          1.36.0   2021-10-26 [1] Bioconductor
##  mgcv                   1.8-39   2022-02-24 [1] CRAN (R 4.1.2)
##  microbiome             1.16.0   2021-10-26 [1] Bioconductor
##  modeltools             0.2-23   2020-03-05 [1] CRAN (R 4.1.0)
##  multcomp               1.4-18   2022-01-04 [1] CRAN (R 4.1.2)
##  multtest               2.50.0   2021-10-26 [1] Bioconductor
##  munsell                0.5.0    2018-06-12 [1] CRAN (R 4.1.0)
##  mvtnorm                1.1-3    2021-10-08 [1] CRAN (R 4.1.0)
##  mycor                  0.1.1    2018-04-10 [1] CRAN (R 4.1.0)
##  NADA                   1.6-1.1  2020-03-22 [1] CRAN (R 4.1.0)
##  nlme                 * 3.1-155  2022-01-13 [1] CRAN (R 4.1.2)
##  nnet                   7.3-17   2022-01-13 [1] CRAN (R 4.1.2)
##  openssl                2.0.0    2022-03-02 [1] CRAN (R 4.1.2)
##  permute              * 0.9-7    2022-01-27 [1] CRAN (R 4.1.2)
##  pheatmap             * 1.0.12   2019-01-04 [1] CRAN (R 4.1.0)
##  phyloseq             * 1.38.0   2021-10-26 [1] Bioconductor
##  picante              * 1.8.2    2020-06-10 [1] CRAN (R 4.1.0)
##  pillar                 1.7.0    2022-02-01 [1] CRAN (R 4.1.2)
##  pkgbuild               1.3.1    2021-12-20 [1] CRAN (R 4.1.0)
##  pkgconfig              2.0.3    2019-09-22 [1] CRAN (R 4.1.0)
##  pkgload                1.2.4    2021-11-30 [1] CRAN (R 4.1.0)
##  plyr                   1.8.6    2020-03-03 [1] CRAN (R 4.1.0)
##  png                    0.1-7    2013-12-03 [1] CRAN (R 4.1.0)
##  ppcor                  1.1      2015-12-03 [1] CRAN (R 4.1.0)
##  prettyunits            1.1.1    2020-01-24 [1] CRAN (R 4.1.0)
##  processx               3.5.2    2021-04-30 [1] CRAN (R 4.1.0)
##  protoclust             1.6.3    2019-01-31 [1] CRAN (R 4.1.0)
##  proxy                  0.4-26   2021-06-07 [1] CRAN (R 4.1.0)
##  ps                     1.6.0    2021-02-28 [1] CRAN (R 4.1.0)
##  pscl                   1.5.5    2020-03-07 [1] CRAN (R 4.1.0)
##  purrr                * 0.3.4    2020-04-17 [1] CRAN (R 4.1.0)
##  qvalue                 2.26.0   2021-10-26 [1] Bioconductor
##  R6                     2.5.1    2021-08-19 [1] CRAN (R 4.1.0)
##  RAIDA                  1.0      2022-03-14 [1] local
##  RColorBrewer         * 1.1-2    2014-12-07 [1] CRAN (R 4.1.0)
##  Rcpp                 * 1.0.8.2  2022-03-11 [1] CRAN (R 4.1.2)
##  RcppZiggurat           0.1.6    2020-10-20 [1] CRAN (R 4.1.0)
##  RCurl                  1.98-1.6 2022-02-08 [1] CRAN (R 4.1.2)
##  readr                * 2.1.2    2022-01-30 [1] CRAN (R 4.1.2)
##  remotes                2.4.2    2021-11-30 [1] CRAN (R 4.1.0)
##  reshape2               1.4.4    2020-04-09 [1] CRAN (R 4.1.0)
##  reticulate             1.24     2022-01-26 [1] CRAN (R 4.1.2)
##  Rfast                  2.0.6    2022-02-16 [1] CRAN (R 4.1.2)
##  rhdf5                  2.38.1   2022-03-10 [1] Bioconductor
##  rhdf5filters           1.6.0    2021-10-26 [1] Bioconductor
##  Rhdf5lib               1.16.0   2021-10-26 [1] Bioconductor
##  rlang                  1.0.2    2022-03-04 [1] CRAN (R 4.1.2)
##  rmarkdown              2.14     2022-04-25 [1] CRAN (R 4.1.2)
##  robustbase             0.93-9   2021-09-27 [1] CRAN (R 4.1.0)
##  rpart                  4.1.16   2022-01-24 [1] CRAN (R 4.1.2)
##  rprojroot              2.0.2    2020-11-15 [1] CRAN (R 4.1.0)
##  RSpectra               0.16-0   2019-12-01 [1] CRAN (R 4.1.0)
##  RSQLite                2.2.10   2022-02-17 [1] CRAN (R 4.1.2)
##  rstatix                0.7.0    2021-02-13 [1] CRAN (R 4.1.0)
##  rstudioapi             0.13     2020-11-12 [1] CRAN (R 4.1.0)
##  Rtsne                  0.15     2018-11-10 [1] CRAN (R 4.1.0)
##  RVenn                  1.1.0    2019-07-18 [1] CRAN (R 4.1.0)
##  rvest                  1.0.2    2021-10-16 [1] CRAN (R 4.1.0)
##  S4Vectors            * 0.32.3   2021-11-21 [1] Bioconductor
##  sandwich               3.0-1    2021-05-18 [1] CRAN (R 4.1.0)
##  sass                   0.4.0    2021-05-12 [1] CRAN (R 4.1.0)
##  scales                 1.1.1    2020-05-11 [1] CRAN (R 4.1.0)
##  scatterplot3d          0.3-41   2018-03-14 [1] CRAN (R 4.1.0)
##  sessioninfo            1.2.2    2021-12-06 [1] CRAN (R 4.1.0)
##  sf                     1.0-7    2022-03-07 [1] CRAN (R 4.1.2)
##  shape                  1.4.6    2021-05-19 [1] CRAN (R 4.1.0)
##  sjlabelled             1.2.0    2022-04-10 [1] CRAN (R 4.1.2)
##  sjmisc                 2.8.9    2021-12-03 [1] CRAN (R 4.1.0)
##  stringi                1.7.6    2021-11-29 [1] CRAN (R 4.1.0)
##  stringr                1.4.0    2019-02-10 [1] CRAN (R 4.1.0)
##  SummarizedExperiment * 1.24.0   2021-10-26 [1] Bioconductor
##  survival               3.3-1    2022-03-03 [1] CRAN (R 4.1.2)
##  svglite                2.1.0    2022-02-03 [1] CRAN (R 4.1.2)
##  systemfonts            1.0.4    2022-02-11 [1] CRAN (R 4.1.2)
##  tensorA                0.36.2   2020-11-19 [1] CRAN (R 4.1.0)
##  testthat               3.1.2    2022-01-20 [1] CRAN (R 4.1.2)
##  TH.data                1.1-0    2021-09-27 [1] CRAN (R 4.1.0)
##  tibble               * 3.1.6    2021-11-07 [1] CRAN (R 4.1.0)
##  tidyr                * 1.2.0    2022-02-01 [1] CRAN (R 4.1.2)
##  tidyselect             1.1.2    2022-02-21 [1] CRAN (R 4.1.2)
##  truncnorm              1.0-8    2018-02-27 [1] CRAN (R 4.1.0)
##  tzdb                   0.2.0    2021-10-27 [1] CRAN (R 4.1.0)
##  umap                   0.2.8.0  2022-03-23 [1] CRAN (R 4.1.2)
##  units                  0.8-0    2022-02-05 [1] CRAN (R 4.1.2)
##  usethis              * 2.1.5    2021-12-09 [1] CRAN (R 4.1.0)
##  utf8                   1.2.2    2021-07-24 [1] CRAN (R 4.1.0)
##  uuid                   1.0-3    2021-11-01 [1] CRAN (R 4.1.0)
##  vctrs                  0.3.8    2021-04-29 [1] CRAN (R 4.1.0)
##  vegan                * 2.5-7    2020-11-28 [1] CRAN (R 4.1.0)
##  VennDiagram          * 1.7.3    2022-04-12 [1] CRAN (R 4.1.2)
##  viridis              * 0.6.2    2021-10-13 [1] CRAN (R 4.1.0)
##  viridisLite          * 0.4.0    2021-04-13 [1] CRAN (R 4.1.0)
##  vroom                  1.5.7    2021-11-30 [1] CRAN (R 4.1.0)
##  webshot                0.5.3    2022-04-14 [1] CRAN (R 4.1.2)
##  withr                  2.5.0    2022-03-03 [1] CRAN (R 4.1.2)
##  Wrench                 1.12.0   2021-10-26 [1] Bioconductor
##  xfun                   0.30     2022-03-02 [1] CRAN (R 4.1.2)
##  XMAS2                * 2.1.8    2022-10-08 [1] local
##  XML                    3.99-0.9 2022-02-24 [1] CRAN (R 4.1.2)
##  xml2                   1.3.3    2021-11-30 [1] CRAN (R 4.1.0)
##  xtable                 1.8-4    2019-04-21 [1] CRAN (R 4.1.0)
##  XVector                0.34.0   2021-10-26 [1] Bioconductor
##  yaml                   2.3.5    2022-02-21 [1] CRAN (R 4.1.2)
##  zCompositions          1.4.0    2022-01-13 [1] CRAN (R 4.1.2)
##  zlibbioc               1.40.0   2021-10-26 [1] Bioconductor
##  zoo                    1.8-9    2021-03-09 [1] CRAN (R 4.1.0)
## 
##  [1] /Library/Frameworks/R.framework/Versions/4.1/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────