Draw a bi-plot, comparing 2 selected principal components / eigenvectors.
biplot(
pcaobj,
x = "PC1",
y = "PC2",
showLoadings = FALSE,
ntopLoadings = 5,
showLoadingsNames = if (showLoadings) TRUE else FALSE,
colLoadingsNames = "black",
sizeLoadingsNames = 3,
boxedLoadingsNames = TRUE,
fillBoxedLoadings = alpha("white", 1/4),
drawConnectorsLoadings = TRUE,
widthConnectorsLoadings = 0.5,
colConnectorsLoadings = "grey50",
lengthLoadingsArrowsFactor = 1.5,
colLoadingsArrows = "black",
widthLoadingsArrows = 0.5,
alphaLoadingsArrow = 1,
colby = NULL,
colkey = NULL,
colLegendTitle = if (!is.null(colby)) colby else NULL,
singlecol = NULL,
shape = NULL,
shapekey = NULL,
shapeLegendTitle = if (!is.null(shape)) shape else NULL,
pointSize = 3,
legendPosition = "none",
legendLabSize = 12,
legendTitleSize = 14,
legendIconSize = 5,
encircle = FALSE,
encircleFill = TRUE,
encircleFillKey = NULL,
encircleAlpha = 1/4,
encircleLineSize = 0.25,
encircleLineCol = NULL,
ellipse = FALSE,
ellipseType = "t",
ellipseLevel = 0.95,
ellipseSegments = 51,
ellipseFill = TRUE,
ellipseFillKey = NULL,
ellipseAlpha = 1/4,
ellipseLineSize = 0.25,
ellipseLineCol = NULL,
xlim = if (showLoadings || ellipse) c(min(pcaobj$rotated[, x]) -
abs((min(pcaobj$rotated[, x])/100) * 35), max(pcaobj$rotated[, x]) +
abs((min(pcaobj$rotated[, x])/100) * 35)) else c(min(pcaobj$rotated[, x]) -
abs((min(pcaobj$rotated[, x])/100) * 10), max(pcaobj$rotated[, x]) +
abs((min(pcaobj$rotated[, x])/100) * 10)),
ylim = if (showLoadings || ellipse) c(min(pcaobj$rotated[, y]) -
abs((min(pcaobj$rotated[, y])/100) * 35), max(pcaobj$rotated[, y]) +
abs((min(pcaobj$rotated[, y])/100) * 35)) else c(min(pcaobj$rotated[, y]) -
abs((min(pcaobj$rotated[, y])/100) * 10), max(pcaobj$rotated[, y]) +
abs((min(pcaobj$rotated[, y])/100) * 10)),
lab = rownames(pcaobj$metadata),
labSize = 3,
boxedLabels = FALSE,
selectLab = NULL,
drawConnectors = TRUE,
widthConnectors = 0.5,
colConnectors = "grey50",
max.overlaps = 15,
maxoverlapsConnectors = NULL,
min.segment.length = 0,
directionConnectors = "both",
xlab = paste0(x, ", ", round(pcaobj$variance[x], digits = 2), "% variation"),
xlabAngle = 0,
xlabhjust = 0.5,
xlabvjust = 0.5,
ylab = paste0(y, ", ", round(pcaobj$variance[y], digits = 2), "% variation"),
ylabAngle = 0,
ylabhjust = 0.5,
ylabvjust = 0.5,
axisLabSize = 16,
title = "",
subtitle = "",
caption = "",
titleLabSize = 16,
subtitleLabSize = 12,
captionLabSize = 12,
hline = NULL,
hlineType = "longdash",
hlineCol = "black",
hlineWidth = 0.4,
vline = NULL,
vlineType = "longdash",
vlineCol = "black",
vlineWidth = 0.4,
gridlines.major = TRUE,
gridlines.minor = TRUE,
borderWidth = 0.8,
borderColour = "black",
returnPlot = TRUE
)
Object of class 'pca' created by pca().
A principal component to plot on x-axis. All principal component names are stored in pcaobj$label.
A principal component to plot on y-axis. All principal component names are stored in pcaobj$label.
Logical, indicating whether or not to overlay variable loadings.
If showLoadings == TRUE, select this many variables based on absolute ordered variable loading for each PC in the biplot. As a result of looking across 2 PCs, it can occur whereby greater than this number are actually displayed.
Logical, indicating to show variable loadings names or not.
If 'showLoadings == TRUE', colour of text labels.
If 'showLoadings == TRUE', size of text labels.
Logical, if 'showLoadings == TRUE', draw text labels in boxes.
When 'boxedLoadingsNames == TRUE', this controls the background fill of the boxes. To control both the fill and transparency, user can specify a value of the form 'alpha(<colour>, <alpha>)'.
If 'showLoadings == TRUE', draw line connectors to the variable loadings arrows in order to fit more labels in the plot space.
If 'showLoadings == TRUE', width of the line connectors drawn to the variable loadings arrows.
If 'showLoadings == TRUE', colour of the line connectors drawn to the variable loadings arrows.
If 'showLoadings == TRUE', multiply the internally-determined length of the variable loadings arrows by this factor.
If showLoadings == TRUE, colour of the variable loadings arrows.
If showLoadings == TRUE, width of the variable loadings arrows.
If showLoadings == TRUE, colour transparency of the variable loadings arrows.
If NULL, all points will be coloured differently. If not NULL, value is assumed to be a column name in pcaobj$metadata relating to some grouping/categorical variable.
Vector of name-value pairs relating to value passed to 'col', e.g., c(A='forestgreen', B='gold').
Title of the legend for the variable specified by 'colby'.
If specified, all points will be shaded by this colour. Overrides 'col'.
If NULL, all points will be have the same shape. If not NULL, value is assumed to be a column name in pcaobj$metadata relating to some grouping/categorical variable.
Vector of name-value pairs relating to value passed to 'shape', e.g., c(A=10, B=21).
Title of the legend for the variable specified by 'shape'.
Size of plotted points.
Position of legend ('top', 'bottom', 'left', 'right', 'none').
Size of plot legend text.
Size of plot legend title text.
Size of plot legend icons / symbols.
Logical, indicating whether to draw a polygon around the groups specified by 'colby'.
Logical, if 'encircle == TRUE', this determines whether to fill the encircled region or not.
Vector of name-value pairs relating to value passed to 'encircleFill', e.g., c(A='forestgreen', B='gold'). If NULL, the fill is controlled by whatever has already been used for 'colby' / 'colkey'.
Alpha for purposes of controlling colour transparency of the encircled region. Used when 'encircle == TRUE'.
Line width of the encircled line when 'encircle == TRUE'.
Colour of the encircled line when 'encircle == TRUE'.
Logical, indicating whether to draw a data ellipse around the groups specified by 'colby'.
[paraphrased from https://ggplot2.tidyverse.org/reference/stat_ellipse.html] The type of ellipse. "t" assumes a multivariate t-distribution, while "norm" assumes a multivariate normal distribution. "euclid" draws a circle with the radius equal to level, representing the euclidean distance from the center. This ellipse probably won't appear circular unless coord_fixed() is applied.
[paraphrased from https://ggplot2.tidyverse.org/reference/stat_ellipse.html] The level at which to draw an ellipse, or, if ellipseType="euclid", the radius of the circle to be drawn.
[from https://ggplot2.tidyverse.org/reference/stat_ellipse.html] The number of segments to be used in drawing the ellipse.
Logical, if 'ellipse == TRUE', this determines whether to fill the region or not.
Vector of name-value pairs relating to value passed to 'ellipseFill', e.g., c(A='forestgreen', B='gold'). If NULL, the fill is controlled by whatever has already been used for 'colby' / 'colkey'.
Alpha for purposes of controlling colour transparency of the ellipse region. Used when 'ellipse == TRUE'.
Line width of the ellipse line when 'ellipse == TRUE'.
Colour of the ellipse line when 'ellipse == TRUE'.
Limits of the x-axis.
Limits of the y-axis.
A vector containing labels to add to the plot.
Size of labels.
Logical, draw text labels in boxes.
A vector containing a subset of lab to plot.
Logical, indicating whether or not to connect plot labels to their corresponding points by line connectors.
Line width of connectors.
Line colour of connectors.
Equivalent of max.overlaps in ggrepel. Set to 'Inf' to always display all labels when drawConnectors = TRUE.
See max.overlaps.
When drawConnectors = TRUE, specifies the minimum length of the connector line segments.
direction in which to draw connectors. 'both', 'x', or 'y'.
Label for x-axis.
Rotation angle of x-axis labels.
Horizontal adjustment of x-axis labels.
Vertical adjustment of x-axis labels.
Label for y-axis.
Rotation angle of y-axis labels.
Horizontal adjustment of y-axis labels.
Vertical adjustment of y-axis labels.
Size of x- and y-axis labels.
Plot title.
Plot subtitle.
Plot caption.
Size of plot title.
Size of plot subtitle.
Size of plot caption.
Draw one or more horizontal lines passing through this/these values on y-axis. For single values, only a single numerical value is necessary. For multiple lines, pass these as a vector, e.g., c(60,90).
Line type for hline ('blank', 'solid', 'dashed', 'dotted', 'dotdash', 'longdash', 'twodash').
Colour of hline.
Width of hline.
Draw one or more vertical lines passing through this/these values on x-axis. For single values, only a single numerical value is necessary. For multiple lines, pass these as a vector, e.g., c(60,90).
Line type for vline ('blank', 'solid', 'dashed', 'dotted', 'dotdash', 'longdash', 'twodash').
Colour of vline.
Width of vline.
Logical, indicating whether or not to draw major gridlines.
Logical, indicating whether or not to draw minor gridlines.
Width of the border on the x and y axes.
Colour of the border on the x and y axes.
Logical, indicating whether or not to return the plot object.
A ggplot2
object.
Draw a bi-plot, comparing 2 selected principal components / eigenvectors.
# NOT RUN {
options(scipen=10)
options(digits=6)
col <- 20
row <- 20000
mat1 <- matrix(
rexp(col*row, rate = 0.1),
ncol = col)
rownames(mat1) <- paste0('gene', 1:nrow(mat1))
colnames(mat1) <- paste0('sample', 1:ncol(mat1))
mat2 <- matrix(
rexp(col*row, rate = 0.1),
ncol = col)
rownames(mat2) <- paste0('gene', 1:nrow(mat2))
colnames(mat2) <- paste0('sample', (ncol(mat1)+1):(ncol(mat1)+ncol(mat2)))
mat <- cbind(mat1, mat2)
metadata <- data.frame(row.names = colnames(mat))
metadata$Group <- rep(NA, ncol(mat))
metadata$Group[seq(1,40,2)] <- 'A'
metadata$Group[seq(2,40,2)] <- 'B'
metadata$CRP <- sample.int(100, size=ncol(mat), replace=TRUE)
metadata$ESR <- sample.int(100, size=ncol(mat), replace=TRUE)
p <- pca(mat, metadata = metadata, removeVar = 0.1)
biplot(p)
biplot(p, colby = 'Group', shape = 'Group')
biplot(p, colby = 'Group', colkey = c(A = 'forestgreen', B = 'gold'),
legendPosition = 'right')
biplot(p, colby = 'Group', colkey = c(A='forestgreen', B='gold'),
shape = 'Group', shapekey = c(A=10, B=21), legendPosition = 'bottom')
# }
Run the code above in your browser using DataLab