Input format
CSV, TSV or semicolon-separated text. The first column holds sample IDs. A text column (such as a group name) is detected and offered as the group column; other text columns are ignored. Remaining columns are numeric features. Blank rows are skipped. Quoted fields, including ones with commas or line breaks inside, are read as one cell, and Windows, Unix and old Mac line endings all work.
Group column
Any text column can be the group column. Numeric group codes (for example 1, 2, 3) are listed under Numeric codes in the same menu. The column you choose is used only for coloring, never as a feature. Group labels are trimmed of surrounding spaces. A sample whose group cell is empty, or says NA, NaN, N/A, #N/A or NULL (in any letter case), is shown as No group in gray. Every other label is a real group, including "None", "-", "." and "?". The same rule decides which columns are offered as group columns: a column that holds only labels such as None and "-" is a group column, and a numeric column is offered as numeric codes only if every cell is a whole number or one of the no-group markers above.
Numbers and missing values
A numeric cell must be a plain number, such as 12, -0.5 or 1.2e-3. Empty cells and the markers NA, NaN, N/A, #N/A, NULL, None, "-", "." and "?" (in any letter case) count as missing, and so does anything else that is not a plain number ("12abc", "1,234"). This longer marker list applies to numeric feature cells only; group labels and group-column detection always use the shorter list given above. A file that uses decimal commas (1,5) is read correctly when it is tab or semicolon separated and the commas cannot be thousands separators. There is no imputation: a feature with any missing value is dropped. Constant features are dropped too: a feature is constant when its spread (standard deviation) is no larger than about machine precision relative to the mean (a few ulp, units in the last place). The notes under the data summary say how many of each.
Orientation
Default: rows are samples, columns are features. If your matrix is flipped, tick Transpose: features in rows.
Scaling
Both options center each feature on its mean first, as standard PCA does. Standardize (z-score, the default) then divides each feature by its sample standard deviation (n - 1), as R's prcomp(scale. = TRUE) does, so every feature counts equally and the eigenvalues add up to the number of features. Use it for typical omics matrices where feature variances differ in scale. Center only keeps each feature's original variance, so high-variance features weigh more.
Axes
X and Y default to PC1 and PC2. Pick any two PCs from PC1 through PC10 to explore secondary structure; changing the scaling keeps your choice. When only one component carries variance (for example with 2 samples) there is no second axis, so no biplot is drawn and a note says why.
Ellipses
Each group with at least 4 samples gets a nominal 95% normal-theory ellipse (ggplot2 convention). It is centered on the group mean and shaped by the group's sample covariance. Its size uses an F quantile, radius = sqrt(2 F(0.95; 2, n - 1)), as in ggplot2's stat_ellipse(type = "norm"). The ellipse shows the spread of the group's samples, not the uncertainty of the group mean. It is not an exact 95% prediction region: for small groups it holds fewer new samples than that, about 84% at 4 samples, 91% at 8 and 93% at 20. Groups with fewer than 4 samples get no ellipse, and a note lists them.
Loadings
The plot follows the convention of factoextra's fviz_pca_biplot. Points are the PC scores. Each arrow is a feature's loading times the square root of the PC's eigenvalue (a scaled loading), so it sits on the same scale as the scores. The top N features are ranked by the length of that arrow on the two PCs shown. All arrows are then multiplied by one factor so the longest reaches about 80% of the shorter axis half-range; the factor is reported in the Figure Legend. This is not a Gabriel biplot: an arrow's length and direction can be read and compared with other arrows, but the inner product of a point and an arrow is not a data value. The x and y axes are stretched independently, so angles on screen are only approximate.
Scree inset
A small bar chart of the variance per PC sits in the emptiest corner of the plot, away from the legend, and is included in PNG and SVG exports. Turn it off under Customize, Legend.
Statistics
Each eigenvalue is the variance of that PC's scores, divided by n - 1. Scores, loadings, eigenvalues and variance explained match R prcomp (with scale. = TRUE for Standardize), up to the sign of each PC. scikit-learn's StandardScaler plus PCA gives the same loadings and variance explained, but its scores are larger by a factor sqrt(n / (n - 1)), because StandardScaler divides by the population standard deviation. Each PC's sign is set so that its largest loading in absolute value is positive, the scikit-learn rule. Tables show 6 significant digits; Copy gives full precision.
Large matrices
The PCA runs in your browser. It takes seconds up to about 1,000 samples or features (whichever is fewer) and about 30 seconds for 2,000 samples by 20,000 features (measured on a 2024 laptop). When the estimated time is more than about 10 seconds, a note gives that estimate before the run, the status bar shows progress, and Reset cancels a running PCA. The estimate is deliberately conservative: it would say about 43 seconds for the 2,000 by 20,000 case. Center only on features whose scales differ by many orders of magnitude can be slower than the estimate suggests, so the estimate is raised for such data.
Export
PNG honors the DPI selector (300 DPI is publication standard, 600 for high-density journals) and records it in the file, so Word and journal systems place it at the right size. SVG is vector and opens in Illustrator and Inkscape. Copy puts PNG on the clipboard.